TD-225: Remove UserInfo auth logic (#22)

* Remove auth logic, update party client

* hadolint please
This commit is contained in:
Alexey S 2022-04-15 14:07:54 +03:00 committed by GitHub
parent b911b96246
commit 0bd0458340
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 172 additions and 435 deletions

View File

@ -4,12 +4,10 @@ ARG OTP_VERSION
FROM docker.io/library/erlang:${OTP_VERSION} AS builder
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG BUILDARCH
# Install thrift compiler
ARG THRIFT_VERSION
RUN wget -q -O- "https://github.com/valitydev/thrift/releases/download/${THRIFT_VERSION}/thrift-${THRIFT_VERSION}-linux-${BUILDARCH}.tar.gz" \
ARG TARGETARCH
RUN wget -q -O- "https://github.com/valitydev/thrift/releases/download/${THRIFT_VERSION}/thrift-${THRIFT_VERSION}-linux-${TARGETARCH}.tar.gz" \
| tar -xvz -C /usr/local/bin/
# Copy sources
@ -29,7 +27,6 @@ ARG SERVICE_NAME
# Set env
ENV CHARSET=UTF-8
ENV LANG=C.UTF-8
ENV SERVICE_NAME=${SERVICE_NAME}
# Set runtime
WORKDIR /opt/${SERVICE_NAME}

View File

@ -3,12 +3,10 @@ ARG OTP_VERSION
FROM docker.io/library/erlang:${OTP_VERSION}
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
ARG BUILDARCH
# Install thrift compiler
ARG THRIFT_VERSION
RUN wget -q -O- "https://github.com/valitydev/thrift/releases/download/${THRIFT_VERSION}/thrift-${THRIFT_VERSION}-linux-${BUILDARCH}.tar.gz" \
ARG TARGETARCH
RUN wget -q -O- "https://github.com/valitydev/thrift/releases/download/${THRIFT_VERSION}/thrift-${THRIFT_VERSION}-linux-${TARGETARCH}.tar.gz" \
| tar -xvz -C /usr/local/bin/
# Set env

View File

@ -17,7 +17,6 @@
gproc,
dmt_client,
party_client,
woody_user_identity,
payproc_errors,
erl_health,
limiter_proto

View File

@ -1,16 +0,0 @@
-module(hg_access_control).
%%% HG access controll
-export([check_user/2]).
-spec check_user(woody_user_identity:user_identity(), dmsl_domain_thrift:'PartyID'()) -> ok | invalid_user.
check_user(#{id := PartyID, realm := <<"external">>}, PartyID) ->
ok;
check_user(#{id := _AnyID, realm := <<"internal">>}, _PartyID) ->
ok;
%% @TODO must be deleted when we get rid of #payproc_ServiceUser
check_user(#{id := _AnyID, realm := <<"service">>}, _PartyID) ->
ok;
check_user(_, _) ->
invalid_user.

View File

@ -8,8 +8,6 @@
-export([get_woody_context/1]).
-export([set_woody_context/2]).
-export([get_user_identity/1]).
-export([set_user_identity/2]).
-export([get_party_client_context/1]).
-export([set_party_client_context/2]).
-export([get_party_client/1]).
@ -18,13 +16,11 @@
-opaque context() :: #{
woody_context := woody_context(),
party_client_context := party_client_context(),
party_client => party_client(),
user_identity => user_identity()
party_client => party_client()
}.
-type options() :: #{
party_client => party_client(),
user_identity => user_identity(),
woody_context => woody_context(),
party_client_context => party_client_context()
}.
@ -34,7 +30,6 @@
%% Internal types
-type user_identity() :: woody_user_identity:user_identity().
-type woody_context() :: woody_context:ctx().
-type party_client() :: party_client:client().
-type party_client_context() :: party_client:context().
@ -73,8 +68,7 @@ cleanup() ->
ok.
-spec get_woody_context(context()) -> woody_context().
get_woody_context(Context) ->
#{woody_context := WoodyContext} = ensure_woody_user_info_set(Context),
get_woody_context(#{woody_context := WoodyContext}) ->
WoodyContext.
-spec set_woody_context(woody_context(), context()) -> context().
@ -92,25 +86,13 @@ set_party_client(PartyClient, Context) ->
Context#{party_client => PartyClient}.
-spec get_party_client_context(context()) -> party_client_context().
get_party_client_context(Context) ->
#{party_client_context := PartyContext} = ensure_party_user_info_set(Context),
get_party_client_context(#{party_client_context := PartyContext}) ->
PartyContext.
-spec set_party_client_context(party_client_context(), context()) -> context().
set_party_client_context(PartyContext, Context) ->
Context#{party_client_context := PartyContext}.
-spec get_user_identity(context()) -> user_identity() | no_return().
get_user_identity(#{user_identity := Identity}) ->
Identity;
get_user_identity(Context) ->
WoodyContext = get_woody_context(Context),
woody_user_identity:get(WoodyContext).
-spec set_user_identity(user_identity(), context()) -> context().
set_user_identity(Identity, Context) ->
Context#{user_identity => Identity}.
%% Internal functions
-spec ensure_woody_context_exists(options()) -> options().
@ -124,17 +106,3 @@ ensure_party_context_exists(#{party_client_context := _PartyContext} = Options)
Options;
ensure_party_context_exists(#{woody_context := WoodyContext} = Options) ->
Options#{party_client_context => party_client:create_context(#{woody_context => WoodyContext})}.
-spec ensure_woody_user_info_set(context()) -> context().
ensure_woody_user_info_set(#{user_identity := Identity, woody_context := WoodyContext} = Context) ->
NewWoodyContext = woody_user_identity:put(Identity, WoodyContext),
Context#{woody_context := NewWoodyContext};
ensure_woody_user_info_set(Context) ->
Context.
-spec ensure_party_user_info_set(context()) -> context().
ensure_party_user_info_set(#{user_identity := Identity, party_client_context := PartyContext} = Context) ->
NewPartyContext = party_client_context:set_user_info(Identity, PartyContext),
Context#{party_client_context := NewPartyContext};
ensure_party_user_info_set(Context) ->
Context.

View File

@ -64,7 +64,6 @@ handle_function_('Create', {CustomerParams}, _Opts) ->
ok = set_meta(CustomerID),
PartyID = CustomerParams#payproc_CustomerParams.party_id,
ShopID = CustomerParams#payproc_CustomerParams.shop_id,
ok = assert_party_accessible(PartyID),
Party = hg_party:get_party(PartyID),
Shop = ensure_shop_exists(hg_party:get_shop(ShopID, Party)),
ok = assert_party_shop_operable(Shop, Party),
@ -340,16 +339,6 @@ validate_paytool_params(PaytoolParams) ->
try
ok = hg_recurrent_paytool:validate_paytool_params(PaytoolParams)
catch
throw:(Exception = #payproc_InvalidUser{}) ->
throw(Exception);
throw:(Exception = #payproc_InvalidPartyStatus{}) ->
throw(Exception);
throw:(Exception = #payproc_InvalidShopStatus{}) ->
throw(Exception);
throw:(Exception = #payproc_InvalidContractStatus{}) ->
throw(Exception);
throw:(Exception = #payproc_OperationNotPermitted{}) ->
throw(Exception);
throw:(#payproc_InvalidPaymentMethod{}) ->
throw(#payproc_OperationNotPermitted{})
end.
@ -664,12 +653,8 @@ assert_customer_present(_) ->
assert_customer_accessible(St = #st{}) ->
ok = assert_customer_present(St),
ok = assert_party_accessible(get_party_id(St)),
ok.
assert_party_accessible(PartyID) ->
hg_invoice_utils:assert_party_accessible(PartyID).
assert_customer_operable(St = #st{}) ->
ok = assert_customer_accessible(St),
Party = hg_party:get_party(get_party_id(St)),

View File

@ -51,7 +51,6 @@
-export([fail/1]).
-import(hg_invoice_utils, [
assert_party_accessible/1,
assert_party_operable/1,
assert_shop_operable/1,
assert_shop_exists/1
@ -146,18 +145,26 @@ get_payment_opts(Revision, _, St = #st{invoice = Invoice}) ->
handle_function(Func, Args, Opts) ->
scoper:scope(
invoicing,
fun() -> handle_function_(Func, Args, Opts) end
fun() ->
handle_function_(Func, remove_user_info_arg(Args), Opts)
end
).
%% @TODO Delete after protocol migration
%% This is a migration measure to make sure we can accept both old and new (with no userinfo) protocol here
remove_user_info_arg(Args0) ->
erlang:delete_element(1, Args0).
add_user_info_arg(Args0) ->
erlang:insert_element(1, Args0, undefined).
-spec handle_function_(woody:func(), woody:args(), hg_woody_wrapper:handler_opts()) -> term() | no_return().
handle_function_('Create', {UserInfo, InvoiceParams}, _Opts) ->
handle_function_('Create', {InvoiceParams}, _Opts) ->
DomainRevision = hg_domain:head(),
InvoiceID = InvoiceParams#payproc_InvoiceParams.id,
ok = assume_user_identity(UserInfo),
_ = set_invoicing_meta(InvoiceID),
PartyID = InvoiceParams#payproc_InvoiceParams.party_id,
ShopID = InvoiceParams#payproc_InvoiceParams.shop_id,
_ = assert_party_accessible(PartyID),
Party = hg_party:get_party(PartyID),
Shop = assert_shop_exists(hg_party:get_shop(ShopID, Party)),
_ = assert_party_shop_operable(Shop, Party),
@ -168,10 +175,9 @@ handle_function_('Create', {UserInfo, InvoiceParams}, _Opts) ->
Allocation = maybe_allocation(AllocationPrototype, Cost, MerchantTerms, Party, Shop),
ok = ensure_started(InvoiceID, undefined, Party#domain_Party.revision, InvoiceParams, Allocation),
get_invoice_state(get_state(InvoiceID));
handle_function_('CreateWithTemplate', {UserInfo, Params}, _Opts) ->
handle_function_('CreateWithTemplate', {Params}, _Opts) ->
DomainRevision = hg_domain:head(),
InvoiceID = Params#payproc_InvoiceWithTemplateParams.id,
ok = assume_user_identity(UserInfo),
_ = set_invoicing_meta(InvoiceID),
TplID = Params#payproc_InvoiceWithTemplateParams.template_id,
{Party, Shop, InvoiceParams} = make_invoice_params(Params),
@ -184,60 +190,42 @@ handle_function_('CreateWithTemplate', {UserInfo, Params}, _Opts) ->
get_invoice_state(get_state(InvoiceID));
handle_function_('CapturePaymentNew', Args, Opts) ->
handle_function_('CapturePayment', Args, Opts);
handle_function_('Get', {UserInfo, InvoiceID, #payproc_EventRange{'after' = AfterID, limit = Limit}}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('Get', {InvoiceID, #payproc_EventRange{'after' = AfterID, limit = Limit}}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
St = get_state(InvoiceID, AfterID, Limit),
_ = assert_invoice(accessible, St),
get_invoice_state(St);
%% TODO Удалить после перехода на новый протокол
handle_function_('Get', {UserInfo, InvoiceID, undefined}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('Get', {InvoiceID, undefined}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
get_invoice_state(St);
handle_function_('GetEvents', {UserInfo, InvoiceID, Range}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('GetEvents', {InvoiceID, Range}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
_ = assert_invoice(accessible, get_initial_state(InvoiceID)),
get_public_history(InvoiceID, Range);
handle_function_('GetInvoiceAdjustment', {UserInfo, InvoiceID, ID}, _Opts) ->
handle_function_('GetInvoiceAdjustment', {InvoiceID, ID}, _Opts) ->
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
ok = assume_user_identity(UserInfo),
ok = set_invoicing_meta(InvoiceID),
get_adjustment(ID, St);
handle_function_('GetPayment', {UserInfo, InvoiceID, PaymentID}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('GetPayment', {InvoiceID, PaymentID}, _Opts) ->
_ = set_invoicing_meta(InvoiceID, PaymentID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
get_payment_state(get_payment_session(PaymentID, St));
handle_function_('GetPaymentRefund', {UserInfo, InvoiceID, PaymentID, ID}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('GetPaymentRefund', {InvoiceID, PaymentID, ID}, _Opts) ->
_ = set_invoicing_meta(InvoiceID, PaymentID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
hg_invoice_payment:get_refund(ID, get_payment_session(PaymentID, St));
handle_function_('GetPaymentChargeback', {UserInfo, InvoiceID, PaymentID, ID}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('GetPaymentChargeback', {InvoiceID, PaymentID, ID}, _Opts) ->
_ = set_invoicing_meta(InvoiceID, PaymentID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
CBSt = hg_invoice_payment:get_chargeback_state(ID, get_payment_session(PaymentID, St)),
hg_invoice_payment_chargeback:get(CBSt);
handle_function_('GetPaymentAdjustment', {UserInfo, InvoiceID, PaymentID, ID}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('GetPaymentAdjustment', {InvoiceID, PaymentID, ID}, _Opts) ->
_ = set_invoicing_meta(InvoiceID, PaymentID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
hg_invoice_payment:get_adjustment(ID, get_payment_session(PaymentID, St));
handle_function_('ComputeTerms', {UserInfo, InvoiceID, PartyRevision0}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('ComputeTerms', {InvoiceID, PartyRevision0}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
St = get_state(InvoiceID),
_ = assert_invoice(accessible, St),
Timestamp = get_created_at(St),
VS = hg_varset:prepare_shop_terms_varset(#{
cost => get_cost(St)
@ -269,20 +257,14 @@ handle_function_(Fun, Args, _Opts) when
Fun =:= 'Fulfill' orelse
Fun =:= 'Rescind'
->
UserInfo = erlang:element(1, Args),
InvoiceID = erlang:element(2, Args),
ok = assume_user_identity(UserInfo),
InvoiceID = erlang:element(1, Args),
_ = set_invoicing_meta(InvoiceID),
call(InvoiceID, Fun, Args);
handle_function_('Repair', {UserInfo, InvoiceID, Changes, Action, Params}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('Repair', {InvoiceID, Changes, Action, Params}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
_ = assert_invoice(accessible, get_initial_state(InvoiceID)),
repair(InvoiceID, {changes, Changes, Action, Params});
handle_function_('RepairWithScenario', {UserInfo, InvoiceID, Scenario}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('RepairWithScenario', {InvoiceID, Scenario}, _Opts) ->
_ = set_invoicing_meta(InvoiceID),
_ = assert_invoice(accessible, get_initial_state(InvoiceID)),
repair(InvoiceID, {scenario, Scenario}).
maybe_allocation(undefined, _Cost, _MerchantTerms, _Party, _Shop) ->
@ -337,9 +319,6 @@ assert_invoice(operable, #st{party = Party} = St) when Party =/= undefined ->
Party
),
St;
assert_invoice(accessible, #st{} = St) ->
assert_party_accessible(get_party_id(St)),
St;
assert_invoice({status, Status}, #st{invoice = #domain_Invoice{status = {Status, _}}} = St) ->
St;
assert_invoice({status, _Status}, #st{invoice = #domain_Invoice{status = Invalid}}) ->
@ -434,9 +413,6 @@ get_state(Ref) ->
get_state(Ref, AfterID, Limit) ->
collapse_history(get_history(Ref, AfterID, Limit)).
get_initial_state(Ref) ->
collapse_history(get_history(Ref, undefined, 1)).
get_public_history(InvoiceID, #payproc_EventRange{'after' = AfterID, limit = Limit}) ->
[publish_invoice_event(InvoiceID, Ev) || Ev <- get_history(InvoiceID, AfterID, Limit)].
@ -457,7 +433,7 @@ ensure_started(ID, TemplateID, PartyRevision, Params, Allocation) ->
end.
call(ID, Function, Args) ->
case hg_machine:thrift_call(?NS, ID, invoicing, {'Invoicing', Function}, Args) of
case hg_machine:thrift_call(?NS, ID, invoicing, {'Invoicing', Function}, add_user_info_arg(Args)) of
ok -> ok;
{ok, Reply} -> Reply;
{exception, Exception} -> erlang:throw(Exception);
@ -607,21 +583,28 @@ handle_expiration(St) ->
process_call(Call, #{history := History}) ->
St = collapse_history(unmarshal_history(History)),
try
handle_result(handle_call(Call, St))
handle_result(handle_call(remove_user_info_from_call(Call), St))
catch
throw:Exception ->
{{exception, Exception}, #{}}
end.
%% @TODO Delete after protocol migration
%% This is a migration measure to make sure we can accept both old and new (with no userinfo) protocol here
remove_user_info_from_call({{'Invoicing', _} = Func, Args0}) ->
{Func, erlang:delete_element(1, Args0)};
remove_user_info_from_call(Call) ->
Call.
-spec handle_call(call(), st()) -> call_result().
handle_call({{'Invoicing', 'StartPayment'}, {_UserInfo, _InvoiceID, PaymentParams}}, St0) ->
handle_call({{'Invoicing', 'StartPayment'}, {_InvoiceID, PaymentParams}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable], St),
_ = assert_invoice(operable, St),
_ = assert_all_adjustments_finalised(St),
start_payment(PaymentParams, St);
handle_call({{'Invoicing', 'CapturePayment'}, {_UserInfo, _InvoiceID, PaymentID, Params}}, St0) ->
handle_call({{'Invoicing', 'CapturePayment'}, {_InvoiceID, PaymentID, Params}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable], St),
_ = assert_invoice(operable, St),
#payproc_InvoicePaymentCaptureParams{
reason = Reason,
cash = Cash,
@ -637,9 +620,9 @@ handle_call({{'Invoicing', 'CapturePayment'}, {_UserInfo, _InvoiceID, PaymentID,
action => Action,
state => St
};
handle_call({{'Invoicing', 'CancelPayment'}, {_UserInfo, _InvoiceID, PaymentID, Reason}}, St0) ->
handle_call({{'Invoicing', 'CancelPayment'}, {_InvoiceID, PaymentID, Reason}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable], St),
_ = assert_invoice(operable, St),
PaymentSession = get_payment_session(PaymentID, St),
{ok, {Changes, Action}} = hg_invoice_payment:cancel(PaymentSession, Reason),
#{
@ -648,17 +631,17 @@ handle_call({{'Invoicing', 'CancelPayment'}, {_UserInfo, _InvoiceID, PaymentID,
action => Action,
state => St
};
handle_call({{'Invoicing', 'Fulfill'}, {_UserInfo, _InvoiceID, Reason}}, St0) ->
handle_call({{'Invoicing', 'Fulfill'}, {_InvoiceID, Reason}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable, {status, paid}], St),
_ = assert_invoice([operable, {status, paid}], St),
#{
response => ok,
changes => [?invoice_status_changed(?invoice_fulfilled(hg_utils:format_reason(Reason)))],
state => St
};
handle_call({{'Invoicing', 'Rescind'}, {_UserInfo, _InvoiceID, Reason}}, St0) ->
handle_call({{'Invoicing', 'Rescind'}, {_InvoiceID, Reason}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable, {status, unpaid}], St),
_ = assert_invoice([operable, {status, unpaid}], St),
_ = assert_no_pending_payment(St),
#{
response => ok,
@ -666,8 +649,7 @@ handle_call({{'Invoicing', 'Rescind'}, {_UserInfo, _InvoiceID, Reason}}, St0) ->
action => hg_machine_action:unset_timer(),
state => St
};
handle_call({{'Invoicing', 'CreateInvoiceAdjustment'}, {_UserInfo, _InvoiceID, Params}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CreateInvoiceAdjustment'}, {_InvoiceID, Params}}, St) ->
ID = create_adjustment_id(St),
TargetStatus = get_adjustment_params_target_status(Params),
InvoiceStatus = get_invoice_status(St),
@ -676,8 +658,7 @@ handle_call({{'Invoicing', 'CreateInvoiceAdjustment'}, {_UserInfo, _InvoiceID, P
ok = assert_all_adjustments_finalised(St),
OccurredAt = hg_datetime:format_now(),
wrap_adjustment_impact(ID, hg_invoice_adjustment:create(ID, Params, OccurredAt), St, OccurredAt);
handle_call({{'Invoicing', 'CaptureAdjustment'}, {_UserInfo, _InvoiceID, ID}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CaptureAdjustment'}, {_InvoiceID, ID}}, St) ->
_ = assert_adjustment_processed(ID, St),
OccurredAt = hg_datetime:format_now(),
?adjustment_target_status(Status) = get_adjustment(ID, St),
@ -688,8 +669,7 @@ handle_call({{'Invoicing', 'CaptureAdjustment'}, {_UserInfo, _InvoiceID, ID}}, S
action => set_invoice_timer(Status, Action, St),
state => St
};
handle_call({{'Invoicing', 'CancelAdjustment'}, {_UserInfo, _InvoiceID, ID}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CancelAdjustment'}, {_InvoiceID, ID}}, St) ->
_ = assert_adjustment_processed(ID, St),
OccurredAt = hg_datetime:format_now(),
Status = get_invoice_status(St),
@ -700,47 +680,41 @@ handle_call({{'Invoicing', 'CancelAdjustment'}, {_UserInfo, _InvoiceID, ID}}, St
action => set_invoice_timer(Status, Action, St),
state => St
};
handle_call({{'Invoicing', 'RefundPayment'}, {_UserInfo, _InvoiceID, PaymentID, Params}}, St0) ->
handle_call({{'Invoicing', 'RefundPayment'}, {_InvoiceID, PaymentID, Params}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable], St),
_ = assert_invoice(operable, St),
PaymentSession = get_payment_session(PaymentID, St),
start_refund(refund, Params, PaymentID, PaymentSession, St);
handle_call({{'Invoicing', 'CreateManualRefund'}, {_UserInfo, _InvoiceID, PaymentID, Params}}, St0) ->
handle_call({{'Invoicing', 'CreateManualRefund'}, {_InvoiceID, PaymentID, Params}}, St0) ->
St = St0#st{party = hg_party:get_party(get_party_id(St0))},
_ = assert_invoice([accessible, operable], St),
_ = assert_invoice(operable, St),
PaymentSession = get_payment_session(PaymentID, St),
start_refund(manual_refund, Params, PaymentID, PaymentSession, St);
handle_call({{'Invoicing', 'CreateChargeback'}, {_UserInfo, _InvoiceID, PaymentID, Params}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CreateChargeback'}, {_InvoiceID, PaymentID, Params}}, St) ->
PaymentSession = get_payment_session(PaymentID, St),
PaymentOpts = get_payment_opts(St),
start_chargeback(Params, PaymentID, PaymentSession, PaymentOpts, St);
handle_call({{'Invoicing', 'CancelChargeback'}, {_UserInfo, _InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
handle_call({{'Invoicing', 'CancelChargeback'}, {_InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
#payproc_InvoicePaymentChargebackCancelParams{occurred_at = OccurredAt} = Params,
_ = assert_invoice(accessible, St),
PaymentSession = get_payment_session(PaymentID, St),
CancelResult = hg_invoice_payment:cancel_chargeback(ChargebackID, PaymentSession, Params),
wrap_payment_impact(PaymentID, CancelResult, St, OccurredAt);
handle_call({{'Invoicing', 'RejectChargeback'}, {_UserInfo, _InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
handle_call({{'Invoicing', 'RejectChargeback'}, {_InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
#payproc_InvoicePaymentChargebackRejectParams{occurred_at = OccurredAt} = Params,
_ = assert_invoice(accessible, St),
PaymentSession = get_payment_session(PaymentID, St),
RejectResult = hg_invoice_payment:reject_chargeback(ChargebackID, PaymentSession, Params),
wrap_payment_impact(PaymentID, RejectResult, St, OccurredAt);
handle_call({{'Invoicing', 'AcceptChargeback'}, {_UserInfo, _InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
handle_call({{'Invoicing', 'AcceptChargeback'}, {_InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
#payproc_InvoicePaymentChargebackAcceptParams{occurred_at = OccurredAt} = Params,
_ = assert_invoice(accessible, St),
PaymentSession = get_payment_session(PaymentID, St),
AcceptResult = hg_invoice_payment:accept_chargeback(ChargebackID, PaymentSession, Params),
wrap_payment_impact(PaymentID, AcceptResult, St, OccurredAt);
handle_call({{'Invoicing', 'ReopenChargeback'}, {_UserInfo, _InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
handle_call({{'Invoicing', 'ReopenChargeback'}, {_InvoiceID, PaymentID, ChargebackID, Params}}, St) ->
#payproc_InvoicePaymentChargebackReopenParams{occurred_at = OccurredAt} = Params,
_ = assert_invoice(accessible, St),
PaymentSession = get_payment_session(PaymentID, St),
ReopenResult = hg_invoice_payment:reopen_chargeback(ChargebackID, PaymentSession, Params),
wrap_payment_impact(PaymentID, ReopenResult, St, OccurredAt);
handle_call({{'Invoicing', 'CreatePaymentAdjustment'}, {_UserInfo, _InvoiceID, PaymentID, Params}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CreatePaymentAdjustment'}, {_InvoiceID, PaymentID, Params}}, St) ->
PaymentSession = get_payment_session(PaymentID, St),
Opts = #{timestamp := Timestamp} = get_payment_opts(St),
wrap_payment_impact(
@ -748,8 +722,7 @@ handle_call({{'Invoicing', 'CreatePaymentAdjustment'}, {_UserInfo, _InvoiceID, P
hg_invoice_payment:create_adjustment(Timestamp, Params, PaymentSession, Opts),
St
);
handle_call({{'Invoicing', 'CapturePaymentAdjustment'}, {_UserInfo, _InvoiceID, PaymentID, ID}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CapturePaymentAdjustment'}, {_InvoiceID, PaymentID, ID}}, St) ->
PaymentSession = get_payment_session(PaymentID, St),
Adjustment = hg_invoice_payment:get_adjustment(ID, PaymentSession),
PaymentOpts = get_payment_opts(
@ -759,8 +732,7 @@ handle_call({{'Invoicing', 'CapturePaymentAdjustment'}, {_UserInfo, _InvoiceID,
),
Impact = hg_invoice_payment:capture_adjustment(ID, PaymentSession, PaymentOpts),
wrap_payment_impact(PaymentID, Impact, St);
handle_call({{'Invoicing', 'CancelPaymentAdjustment'}, {_UserInfo, _InvoiceID, PaymentID, ID}}, St) ->
_ = assert_invoice(accessible, St),
handle_call({{'Invoicing', 'CancelPaymentAdjustment'}, {_InvoiceID, PaymentID, ID}}, St) ->
PaymentSession = get_payment_session(PaymentID, St),
Adjustment = hg_invoice_payment:get_adjustment(ID, PaymentSession),
PaymentOpts = get_payment_opts(
@ -1272,9 +1244,6 @@ create_adjustment_id(#st{adjustments = Adjustments}) ->
%%
assume_user_identity(UserInfo) ->
hg_woody_handler_utils:assume_user_identity(UserInfo).
make_invoice_params(Params) ->
#payproc_InvoiceWithTemplateParams{
id = InvoiceID,
@ -1294,7 +1263,6 @@ make_invoice_params(Params) ->
} = hg_invoice_template:get(TplID),
Party = hg_party:get_party(PartyID),
Shop = assert_shop_exists(hg_party:get_shop(ShopID, Party)),
_ = assert_party_accessible(PartyID),
_ = assert_party_shop_operable(Shop, Party),
Cart = make_invoice_cart(Cost, TplDetails, Shop),
InvoiceDetails = #domain_InvoiceDetails{

View File

@ -3928,8 +3928,6 @@ get_customer(CustomerID) ->
Customer;
{exception, #payproc_CustomerNotFound{}} ->
throw_invalid_request(<<"Customer not found">>);
{exception, #payproc_InvalidUser{}} ->
throw_invalid_request(<<"Invalid customer">>);
{exception, Error} ->
error({<<"Can't get customer">>, Error})
end.

View File

@ -49,42 +49,45 @@ get_invoice_template(ID) ->
handle_function(Func, Args, Opts) ->
scoper:scope(
invoice_templating,
fun() -> handle_function_(Func, Args, Opts) end
fun() ->
handle_function_(Func, remove_user_info_arg(Args), Opts)
end
).
%% @TODO Delete after protocol migration
%% This is a migration measure to make sure we can accept both old and new (with no userinfo) protocol here
remove_user_info_arg(Args0) ->
erlang:delete_element(1, Args0).
add_user_info_arg(Args0) ->
erlang:insert_element(1, Args0, undefined).
-spec handle_function_(woody:func(), woody:args(), hg_woody_wrapper:handler_opts()) -> term() | no_return().
handle_function_('Create', {UserInfo, Params}, _Opts) ->
handle_function_('Create', {Params}, _Opts) ->
TplID = Params#payproc_InvoiceTemplateCreateParams.template_id,
ok = assume_user_identity(UserInfo),
_ = set_meta(TplID),
Party = get_party(Params#payproc_InvoiceTemplateCreateParams.party_id),
Shop = get_shop(Params#payproc_InvoiceTemplateCreateParams.shop_id, Party),
ok = validate_create_params(Params, Shop),
ok = start(TplID, Params),
get_invoice_template(TplID);
handle_function_('Get', {UserInfo, TplID}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('Get', {TplID}, _Opts) ->
_ = set_meta(TplID),
Tpl = get_invoice_template(TplID),
_ = hg_invoice_utils:assert_party_accessible(Tpl#domain_InvoiceTemplate.owner_id),
Tpl;
handle_function_('Update' = Fun, {UserInfo, TplID, Params} = Args, _Opts) ->
ok = assume_user_identity(UserInfo),
get_invoice_template(TplID);
handle_function_('Update' = Fun, {TplID, Params} = Args, _Opts) ->
_ = set_meta(TplID),
Tpl = get_invoice_template(TplID),
Party = get_party(Tpl#domain_InvoiceTemplate.owner_id),
Shop = get_shop(Tpl#domain_InvoiceTemplate.shop_id, Party),
ok = validate_update_params(Params, Shop),
call(TplID, Fun, Args);
handle_function_('Delete' = Fun, {UserInfo, TplID} = Args, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('Delete' = Fun, {TplID} = Args, _Opts) ->
Tpl = get_invoice_template(TplID),
Party = get_party(Tpl#domain_InvoiceTemplate.owner_id),
_ = get_shop(Tpl#domain_InvoiceTemplate.shop_id, Party),
_ = set_meta(TplID),
call(TplID, Fun, Args);
handle_function_('ComputeTerms', {UserInfo, TplID, Timestamp, PartyRevision0}, _Opts) ->
ok = assume_user_identity(UserInfo),
handle_function_('ComputeTerms', {TplID, Timestamp, PartyRevision0}, _Opts) ->
_ = set_meta(TplID),
Tpl = get_invoice_template(TplID),
Cost =
@ -106,11 +109,7 @@ handle_function_('ComputeTerms', {UserInfo, TplID, Timestamp, PartyRevision0}, _
VS
).
assume_user_identity(UserInfo) ->
hg_woody_handler_utils:assume_user_identity(UserInfo).
get_party(PartyID) ->
_ = hg_invoice_utils:assert_party_accessible(PartyID),
Party = hg_party:get_party(PartyID),
_ = hg_invoice_utils:assert_party_operable(Party),
Party.
@ -157,7 +156,9 @@ start(ID, Params) ->
map_start_error(hg_machine:start(?NS, ID, EncodedParams)).
call(ID, Function, Args) ->
case hg_machine:thrift_call(?NS, ID, invoice_templating, {'InvoiceTemplating', Function}, Args) of
case
hg_machine:thrift_call(?NS, ID, invoice_templating, {'InvoiceTemplating', Function}, add_user_info_arg(Args))
of
ok ->
ok;
{ok, Reply} ->
@ -250,7 +251,7 @@ process_signal({repair, _}, _Machine) ->
-spec process_call(call(), hg_machine:machine()) -> {hg_machine:response(), hg_machine:result()}.
process_call(Call, #{history := History}) ->
St = collapse_history(unmarshal_history(History)),
try handle_call(Call, St) of
try handle_call(remove_user_info_from_call(Call), St) of
{ok, Changes} ->
{ok, #{events => [marshal_event_payload(Changes)]}};
{Reply, Changes} ->
@ -260,10 +261,15 @@ process_call(Call, #{history := History}) ->
{{exception, Exception}, #{}}
end.
handle_call({{'InvoiceTemplating', 'Update'}, {_UserInfo, _TplID, Params}}, Tpl) ->
%% @TODO Delete after protocol migration
%% This is a migration measure to make sure we can accept both old and new (with no userinfo) protocol here
remove_user_info_from_call({{'InvoiceTemplating', _} = Func, Args0}) ->
{Func, erlang:delete_element(1, Args0)}.
handle_call({{'InvoiceTemplating', 'Update'}, {_TplID, Params}}, Tpl) ->
Changes = [?tpl_updated(Params)],
{merge_changes(Changes, Tpl), Changes};
handle_call({{'InvoiceTemplating', 'Delete'}, {_UserInfo, _TplID}}, _Tpl) ->
handle_call({{'InvoiceTemplating', 'Delete'}, {_TplID}}, _Tpl) ->
{ok, [?tpl_deleted()]}.
collapse_history(History) ->

View File

@ -8,7 +8,6 @@
-export([validate_cost/2]).
-export([validate_currency/2]).
-export([validate_cash_range/1]).
-export([assert_party_accessible/1]).
-export([assert_party_operable/1]).
-export([assert_shop_exists/1]).
-export([assert_shop_operable/1]).
@ -49,16 +48,6 @@ validate_amount(_) ->
validate_currency(Currency, Shop = #domain_Shop{}) ->
validate_currency_(Currency, get_shop_currency(Shop)).
-spec assert_party_accessible(party_id()) -> ok.
assert_party_accessible(PartyID) ->
UserIdentity = hg_woody_handler_utils:get_user_identity(),
case hg_access_control:check_user(UserIdentity, PartyID) of
ok ->
ok;
invalid_user ->
throw(#payproc_InvalidUser{})
end.
-spec validate_cash_range(cash_range()) -> ok.
validate_cash_range(#domain_CashRange{
lower = {LType, #domain_Cash{amount = LAmount, currency = Currency}},

View File

@ -747,7 +747,6 @@ handle_result_action(#{}, Acc) ->
%%
ensure_party_accessible(#payproc_RecurrentPaymentToolParams{party_id = PartyID, party_revision = Revision0}) ->
_ = hg_invoice_utils:assert_party_accessible(PartyID),
Revision = ensure_party_revision_defined(PartyID, Revision0),
hg_party:checkout(PartyID, {revision, Revision}).

View File

@ -1,56 +0,0 @@
-module(hg_woody_handler_utils).
-include_lib("damsel/include/dmsl_payment_processing_thrift.hrl").
-type user_info() :: dmsl_payment_processing_thrift:'UserInfo'().
-type user_identity() :: woody_user_identity:user_identity().
-export([get_user_identity/0]).
-export([collect_user_identity/1]).
-export([set_user_identity/1]).
-export([assume_user_identity/1]).
-spec get_user_identity() -> woody_user_identity:user_identity() | undefined.
get_user_identity() ->
try
Context = hg_context:load(),
woody_user_identity:get(hg_context:get_woody_context(Context))
catch
throw:{missing_required, _Key} ->
undefined
end.
-spec collect_user_identity(user_info()) -> user_identity().
collect_user_identity(UserInfo) ->
case get_user_identity() of
V when V /= undefined ->
V;
undefined ->
map_user_info(UserInfo)
end.
-spec set_user_identity(user_identity()) -> ok.
set_user_identity(UserIdentity) ->
hg_context:save(hg_context:set_user_identity(UserIdentity, hg_context:load())).
-spec assume_user_identity(user_info()) -> ok.
assume_user_identity(UserInfo) ->
case get_user_identity() of
V when V /= undefined ->
ok;
undefined ->
set_user_identity(map_user_info(UserInfo))
end.
map_user_info(#payproc_UserInfo{id = PartyID, type = Type}) ->
#{
id => PartyID,
realm => map_user_type(Type)
}.
map_user_type({external_user, #payproc_ExternalUser{}}) ->
<<"external">>;
map_user_type({internal_user, #payproc_InternalUser{}}) ->
<<"internal">>;
map_user_type({service_user, #payproc_ServiceUser{}}) ->
<<"service">>.

View File

@ -6,8 +6,8 @@
-export([cfg/2]).
-export([create_client/1]).
-export([create_client/2]).
-export([create_client/3]).
-export([create_party_and_shop/6]).
-export([create_party/2]).
@ -296,19 +296,16 @@ cfg(Key, Config) ->
%%
-spec create_client(woody:url(), woody_user_identity:id()) -> hg_client_api:t().
create_client(RootUrl, UserID) ->
create_client_w_context(RootUrl, UserID, woody_context:new()).
-spec create_client(woody:url()) -> hg_client_api:t().
create_client(RootUrl) ->
create_client_w_context(RootUrl, woody_context:new()).
-spec create_client(woody:url(), woody_user_identity:id(), woody:trace_id()) -> hg_client_api:t().
create_client(RootUrl, UserID, TraceID) ->
create_client_w_context(RootUrl, UserID, woody_context:new(TraceID)).
-spec create_client(woody:url(), woody:trace_id()) -> hg_client_api:t().
create_client(RootUrl, TraceID) ->
create_client_w_context(RootUrl, woody_context:new(TraceID)).
create_client_w_context(RootUrl, UserID, WoodyCtx) ->
hg_client_api:new(RootUrl, woody_user_identity:put(make_user_identity(UserID), WoodyCtx)).
make_user_identity(UserID) ->
#{id => genlib:to_binary(UserID), realm => <<"external">>}.
create_client_w_context(RootUrl, WoodyCtx) ->
hg_client_api:new(RootUrl, WoodyCtx).
%%

View File

@ -17,7 +17,6 @@
-export([init_per_testcase/2]).
-export([end_per_testcase/2]).
-export([invalid_user/1]).
-export([invalid_party/1]).
-export([invalid_shop/1]).
-export([invalid_party_status/1]).
@ -81,7 +80,7 @@ init_per_suite(C) ->
_ = hg_domain:insert(construct_domain_fixture(construct_term_set_w_recurrent_paytools())),
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
PartyClient = {party_client:create_client(), party_client:create_context(user_info())},
PartyClient = {party_client:create_client(), party_client:create_context()},
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
{ok, SupPid} = supervisor:start_link(?MODULE, []),
_ = unlink(SupPid),
@ -97,9 +96,6 @@ init_per_suite(C) ->
ok = start_proxies([{hg_dummy_provider, 1, C1}, {hg_dummy_inspector, 2, C1}]),
C1.
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> _.
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -117,7 +113,6 @@ all() ->
groups() ->
[
{invalid_customer_params, [sequence], [
invalid_user,
invalid_party,
invalid_shop,
invalid_party_status,
@ -158,9 +153,8 @@ groups() ->
-spec init_per_testcase(test_case_name(), config()) -> config().
init_per_testcase(Name, C) ->
RootUrl = cfg(root_url, C),
PartyID = cfg(party_id, C),
TraceID = hg_ct_helper:make_trace_id(Name),
Client = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, PartyID, TraceID)),
Client = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, TraceID)),
[
{test_case_name, genlib:to_binary(Name)},
{trace_id, TraceID},
@ -174,24 +168,16 @@ end_per_testcase(_Name, _C) ->
%%
-spec invalid_user(config()) -> test_case_result().
-spec invalid_party(config()) -> test_case_result().
-spec invalid_shop(config()) -> test_case_result().
-spec invalid_party_status(config()) -> test_case_result().
-spec invalid_shop_status(config()) -> test_case_result().
invalid_user(C) ->
Client = cfg(client, C),
PartyID = hg_utils:unique_id(),
ShopID = hg_utils:unique_id(),
Params = hg_ct_helper:make_customer_params(PartyID, ShopID, cfg(test_case_name, C)),
{exception, #payproc_InvalidUser{}} = hg_client_customer:create(Params, Client).
invalid_party(C) ->
RootUrl = cfg(root_url, C),
PartyID = hg_utils:unique_id(),
ShopID = hg_utils:unique_id(),
Client = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, PartyID, cfg(trace_id, C))),
Client = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, cfg(trace_id, C))),
Params = hg_ct_helper:make_customer_params(PartyID, ShopID, cfg(test_case_name, C)),
{exception, #payproc_PartyNotFound{}} = hg_client_customer:create(Params, Client).

View File

@ -126,8 +126,8 @@ init_per_suite(C) ->
_ = hg_domain:insert(construct_domain_fixture(construct_term_set_w_recurrent_paytools())),
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
PartyClient = {party_client:create_client(), party_client:create_context(user_info())},
CustomerClient = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, PartyID)),
PartyClient = {party_client:create_client(), party_client:create_context()},
CustomerClient = hg_client_customer:start(hg_ct_helper:create_client(RootUrl)),
_ = hg_ct_helper:create_party(PartyID, PartyClient),
Shop1ID = hg_ct_helper:create_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Shop2ID = hg_ct_helper:create_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
@ -146,9 +146,6 @@ init_per_suite(C) ->
ok = start_proxies([{hg_dummy_provider, 1, C1}, {hg_dummy_inspector, 2, C1}]),
C1.
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> config().
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -165,7 +162,7 @@ end_per_group(_Name, _C) ->
-spec init_per_testcase(test_case_name(), config()) -> config().
init_per_testcase(Name, C) ->
TraceID = hg_ct_helper:make_trace_id(Name),
ApiClient = hg_ct_helper:create_client(cfg(root_url, C), cfg(party_id, C)),
ApiClient = hg_ct_helper:create_client(cfg(root_url, C)),
Client = hg_client_invoicing:start_link(ApiClient),
[
{test_case_name, genlib:to_binary(Name)},

View File

@ -94,7 +94,7 @@ init_per_suite(C) ->
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
PartyClient = {party_client:create_client(), party_client:create_context(user_info())},
PartyClient = {party_client:create_client(), party_client:create_context()},
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
{ok, SupPid} = supervisor:start_link(?MODULE, []),
@ -111,9 +111,6 @@ init_per_suite(C) ->
ok = start_proxies([{hg_dummy_provider, 1, NewC}, {hg_dummy_inspector, 2, NewC}]),
NewC.
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> _.
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -125,7 +122,7 @@ init_per_testcase(_Name, C) ->
init_per_testcase(C).
init_per_testcase(C) ->
ApiClient = hg_ct_helper:create_client(cfg(root_url, C), cfg(party_id, C)),
ApiClient = hg_ct_helper:create_client(cfg(root_url, C)),
Client = hg_client_invoicing:start_link(ApiClient),
ClientTpl = hg_client_invoice_templating:start_link(ApiClient),
ok = hg_context:save(hg_context:create()),

View File

@ -12,7 +12,6 @@
-export([init_per_testcase/2]).
-export([end_per_testcase/2]).
-export([create_invalid_party/1]).
-export([create_invalid_shop/1]).
-export([create_invalid_party_status/1]).
-export([create_invalid_shop_status/1]).
@ -53,7 +52,6 @@
-spec all() -> [test_case_name()].
all() ->
[
create_invalid_party,
create_invalid_shop,
create_invalid_party_status,
create_invalid_shop_status,
@ -88,7 +86,7 @@ init_per_suite(C) ->
_ = hg_domain:insert(construct_domain_fixture()),
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
Client = {party_client:create_client(), party_client:create_context(user_info())},
Client = {party_client:create_client(), party_client:create_context()},
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), Client),
[
{party_id, PartyID},
@ -99,9 +97,6 @@ init_per_suite(C) ->
| C
].
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> _.
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -112,22 +107,13 @@ end_per_suite(C) ->
-spec init_per_testcase(test_case_name(), config()) -> config().
init_per_testcase(_Name, C) ->
RootUrl = cfg(root_url, C),
PartyID = cfg(party_id, C),
Client = hg_client_invoice_templating:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoice_templating:start_link(hg_ct_helper:create_client(RootUrl)),
[{client, Client} | C].
-spec end_per_testcase(test_case_name(), config()) -> _.
end_per_testcase(_Name, _C) ->
ok.
-spec create_invalid_party(config()) -> _.
create_invalid_party(C) ->
Client = cfg(client, C),
ShopID = cfg(shop_id, C),
PartyID = ?MISSING_PARTY_ID,
Params = make_invoice_tpl_create_params(PartyID, ShopID),
{exception, #payproc_InvalidUser{}} = hg_client_invoice_templating:create(Params, Client).
-spec create_invalid_shop(config()) -> _.
create_invalid_shop(C) ->
Client = cfg(client, C),

View File

@ -713,12 +713,12 @@ init_per_suite(C) ->
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
PartyClient = {party_client:create_client(), party_client:create_context(user_info())},
CustomerClient = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, PartyID)),
PartyClient = {party_client:create_client(), party_client:create_context()},
CustomerClient = hg_client_customer:start(hg_ct_helper:create_client(RootUrl)),
Party2ID = hg_utils:unique_id(),
PartyClient2 = {party_client:create_client(), party_client:create_context(user_info())},
CustomerClient2 = hg_client_customer:start(hg_ct_helper:create_client(RootUrl, Party2ID)),
PartyClient2 = {party_client:create_client(), party_client:create_context()},
CustomerClient2 = hg_client_customer:start(hg_ct_helper:create_client(RootUrl)),
Party3ID = <<"bIg merch">>,
_ = hg_ct_helper:create_party(Party3ID, PartyClient),
@ -748,9 +748,6 @@ init_per_suite(C) ->
ok = start_proxies([{hg_dummy_provider, 1, NewC}, {hg_dummy_inspector, 2, NewC}]),
NewC.
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> _.
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -926,7 +923,7 @@ override_domain_fixture(Fixture, C) ->
[{original_domain_revision, Revision} | init_per_testcase(C)].
init_per_testcase(C) ->
ApiClient = hg_ct_helper:create_client(cfg(root_url, C), cfg(party_id, C)),
ApiClient = hg_ct_helper:create_client(cfg(root_url, C)),
Client = hg_client_invoicing:start_link(ApiClient),
ClientTpl = hg_client_invoice_templating:start_link(ApiClient),
ok = hg_context:save(hg_context:create()),
@ -1362,7 +1359,7 @@ payment_limit_success(C, PmtSys) ->
PartyClient = cfg(party_client, C),
#{party_id := PartyID} = cfg(limits, C),
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
?invoice_state(
?invoice_w_status(?invoice_paid()),
@ -1383,7 +1380,7 @@ payment_limit_other_shop_success(C, PmtSys) ->
#{party_id := PartyID} = cfg(limits, C),
ShopID1 = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
ShopID2 = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
PaymentAmount = ?LIMIT_UPPER_BOUNDARY - 1,
?invoice_state(
@ -1409,7 +1406,7 @@ payment_limit_overflow(C, PmtSys) ->
#{party_id := PartyID} = cfg(limits, C),
PartyClient = cfg(party_client, C),
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
PaymentAmount = ?LIMIT_UPPER_BOUNDARY - 1,
?invoice_state(
?invoice_w_status(?invoice_paid()) = Invoice,
@ -1441,7 +1438,7 @@ switch_provider_after_limit_overflow(C, PmtSys, ProviderID) ->
#{party_id_w_several_limits := PartyID} = cfg(limits, C),
PaymentAmount = 49999,
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
?invoice_state(
?invoice_w_status(?invoice_paid()) = Invoice,
@ -1479,7 +1476,7 @@ refund_limit_success(C, PmtSys) ->
PartyClient = cfg(party_client, C),
#{party_id := PartyID} = cfg(limits, C),
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
?invoice_state(
?invoice_w_status(?invoice_paid()),
@ -1530,7 +1527,7 @@ payment_partial_capture_limit_success(C, PmtSys) ->
PartyClient = cfg(party_client, C),
#{party_id := PartyID} = cfg(limits, C),
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(8), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
InvoiceParams = make_invoice_params(PartyID, ShopID, <<"rubberduck">>, make_due_date(100), make_cash(InitialCost)),
InvoiceID = create_invoice(InvoiceParams, Client),
@ -1621,7 +1618,7 @@ payment_success_ruleset(C, PmtSys) ->
PartyID = cfg(party_id_big_merch, C),
RootUrl = cfg(root_url, C),
PartyClient = cfg(party_client, C),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
ShopID = hg_ct_helper:create_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
InvoiceParams = make_invoice_params(PartyID, ShopID, <<"rubberduck">>, make_due_date(10), make_cash(42000)),
InvoiceID = create_invoice(InvoiceParams, Client),
@ -2510,7 +2507,7 @@ party_revision_check_new(C) ->
party_revision_check(C, PartyID, PmtSys) ->
RootUrl = cfg(root_url, C),
PartyClient = cfg(party_client, C),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
Client = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
{InvoiceRev, InvoiceID} = invoice_create_and_get_revision(PartyID, Client, ShopID),
@ -3067,7 +3064,7 @@ invalid_payment_w_deprived_party_new(C) ->
invalid_payment_w_deprived_party(C, PartyID, PmtSys) ->
RootUrl = cfg(root_url, C),
PartyClient = cfg(party_client, C),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
InvoiceParams = make_invoice_params(PartyID, ShopID, <<"rubberduck">>, make_due_date(10), make_cash(42000)),
InvoiceID = create_invoice(InvoiceParams, InvoicingClient),
@ -3089,7 +3086,7 @@ external_account_posting(C, PmtSys) ->
PartyID = ?PARTYID_EXTERNAL,
RootUrl = cfg(root_url, C),
PartyClient = cfg(party_client, C),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
ShopID = hg_ct_helper:create_battle_ready_shop(PartyID, ?cat(2), <<"RUB">>, ?tmpl(2), ?pinst(2), PartyClient),
InvoiceParams = make_invoice_params(PartyID, ShopID, <<"rubbermoss">>, make_due_date(10), make_cash(42000)),
InvoiceID = create_invoice(InvoiceParams, InvoicingClient),
@ -3135,7 +3132,7 @@ terminal_cashflow_overrides_provider(C, PmtSys) ->
PartyID = ?PARTYID_EXTERNAL,
RootUrl = cfg(root_url, C),
PartyClient = cfg(party_client, C),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl, PartyID)),
InvoicingClient = hg_client_invoicing:start_link(hg_ct_helper:create_client(RootUrl)),
ShopID = hg_ct_helper:create_battle_ready_shop(PartyID, ?cat(4), <<"RUB">>, ?tmpl(2), ?pinst(2), PartyClient),
InvoiceParams = make_invoice_params(PartyID, ShopID, <<"rubbermoss">>, make_due_date(10), make_cash(42000)),
InvoiceID = create_invoice(InvoiceParams, InvoicingClient),

View File

@ -19,8 +19,6 @@
-export([init_per_testcase/2]).
-export([end_per_testcase/2]).
-export([invalid_user/1]).
-export([invalid_user_new/1]).
-export([invalid_party/1]).
-export([invalid_party_new/1]).
-export([invalid_shop/1]).
@ -87,7 +85,7 @@ init_per_suite(C) ->
_ = hg_domain:insert(construct_domain_fixture(construct_term_set_w_recurrent_paytools())),
RootUrl = maps:get(hellgate_root_url, Ret),
PartyID = hg_utils:unique_id(),
PartyClient = {party_client:create_client(), party_client:create_context(user_info())},
PartyClient = {party_client:create_client(), party_client:create_context()},
ShopID = hg_ct_helper:create_party_and_shop(PartyID, ?cat(1), <<"RUB">>, ?tmpl(1), ?pinst(1), PartyClient),
{ok, SupPid} = supervisor:start_link(?MODULE, []),
_ = unlink(SupPid),
@ -103,9 +101,6 @@ init_per_suite(C) ->
ok = start_proxies([{hg_dummy_provider, 1, C1}, {hg_dummy_inspector, 2, C1}]),
C1.
user_info() ->
#{user_info => #{id => <<"test">>, realm => <<"service">>}}.
-spec end_per_suite(config()) -> _.
end_per_suite(C) ->
_ = hg_domain:cleanup(),
@ -139,8 +134,6 @@ all() ->
groups() ->
[
{invalid_recurrent_paytool_params, [sequence], [
invalid_user,
invalid_user_new,
invalid_party,
invalid_party_new,
invalid_shop,
@ -159,9 +152,8 @@ groups() ->
-spec init_per_testcase(test_case_name(), config()) -> config().
init_per_testcase(Name, C) ->
RootUrl = cfg(root_url, C),
PartyID = cfg(party_id, C),
TraceID = hg_ct_helper:make_trace_id(Name),
Client = hg_client_recurrent_paytool:start(hg_ct_helper:create_client(RootUrl, PartyID, TraceID)),
Client = hg_client_recurrent_paytool:start(hg_ct_helper:create_client(RootUrl, TraceID)),
[
{test_case_name, genlib:to_binary(Name)},
{trace_id, TraceID},
@ -179,8 +171,6 @@ end_per_testcase(_Name, _C) ->
%% invalid_recurrent_paytool_params group
-spec invalid_user(config()) -> test_case_result().
-spec invalid_user_new(config()) -> test_case_result().
-spec invalid_party(config()) -> test_case_result().
-spec invalid_party_new(config()) -> test_case_result().
-spec invalid_shop(config()) -> test_case_result().
@ -192,20 +182,6 @@ end_per_testcase(_Name, _C) ->
-spec invalid_payment_method(config()) -> test_case_result().
-spec invalid_payment_method_new(config()) -> test_case_result().
invalid_user(C) ->
invalid_user(C, visa).
invalid_user_new(C) ->
invalid_user(C, ?pmt_sys(<<"visa-ref">>)).
invalid_user(C, PmtSys) ->
PaytoolID = hg_utils:unique_id(),
Client = cfg(client, C),
PartyID = hg_utils:unique_id(),
ShopID = hg_utils:unique_id(),
Params = make_recurrent_paytool_params(PaytoolID, PartyID, ShopID, PmtSys),
{exception, #payproc_InvalidUser{}} = hg_client_recurrent_paytool:create(Params, Client).
invalid_party(C) ->
invalid_party(C, visa).
@ -217,7 +193,7 @@ invalid_party(C, PmtSys) ->
PaytoolID = hg_utils:unique_id(),
PartyID = hg_utils:unique_id(),
ShopID = hg_utils:unique_id(),
Client = hg_client_recurrent_paytool:start(hg_ct_helper:create_client(RootUrl, PartyID, cfg(trace_id, C))),
Client = hg_client_recurrent_paytool:start(hg_ct_helper:create_client(RootUrl, cfg(trace_id, C))),
Params = make_recurrent_paytool_params(PaytoolID, PartyID, ShopID, PmtSys),
{exception, #payproc_PartyNotFound{}} = hg_client_recurrent_paytool:create(Params, Client).

View File

@ -152,15 +152,8 @@ end_per_group(_GroupName, C) ->
-spec init_per_testcase(test_case_name(), config()) -> config().
init_per_testcase(_, C) ->
Ctx0 = hg_context:set_party_client(cfg(party_client, C), hg_context:create()),
Ctx1 = hg_context:set_user_identity(
#{
id => cfg(party_id, C),
realm => <<"internal">>
},
Ctx0
),
PartyClientContext = party_client_context:create(#{}),
Ctx2 = hg_context:set_party_client_context(PartyClientContext, Ctx1),
Ctx2 = hg_context:set_party_client_context(PartyClientContext, Ctx0),
ok = hg_context:save(Ctx2),
C.

View File

@ -3,7 +3,6 @@
-include_lib("damsel/include/dmsl_payment_processing_thrift.hrl").
-export([start/1]).
-export([start/2]).
-export([start_link/1]).
-export([stop/1]).
@ -27,7 +26,6 @@
%%
-type user_info() :: dmsl_payment_processing_thrift:'UserInfo'().
-type id() :: dmsl_domain_thrift:'InvoiceTemplateID'().
-type create_params() :: dmsl_payment_processing_thrift:'InvoiceTemplateCreateParams'().
-type update_params() :: dmsl_payment_processing_thrift:'InvoiceTemplateUpdateParams'().
@ -38,18 +36,14 @@
-spec start(hg_client_api:t()) -> pid().
start(ApiClient) ->
start(start, undefined, ApiClient).
-spec start(user_info(), hg_client_api:t()) -> pid().
start(UserInfo, ApiClient) ->
start(start, UserInfo, ApiClient).
start(start, ApiClient).
-spec start_link(hg_client_api:t()) -> pid().
start_link(ApiClient) ->
start(start_link, undefined, ApiClient).
start(start_link, ApiClient).
start(Mode, UserInfo, ApiClient) ->
{ok, Pid} = gen_server:Mode(?MODULE, {UserInfo, ApiClient}, []),
start(Mode, ApiClient) ->
{ok, Pid} = gen_server:Mode(?MODULE, ApiClient, []),
Pid.
-spec stop(pid()) -> ok.
@ -91,7 +85,6 @@ map_result_error({error, Error}) ->
-type event() :: dmsl_payment_processing_thrift:'Event'().
-record(state, {
user_info :: user_info(),
pollers :: #{id() => hg_client_event_poller:st(event())},
client :: hg_client_api:t()
}).
@ -99,13 +92,13 @@ map_result_error({error, Error}) ->
-type state() :: #state{}.
-type callref() :: {pid(), Tag :: reference()}.
-spec init({user_info(), hg_client_api:t()}) -> {ok, state()}.
init({UserInfo, ApiClient}) ->
{ok, #state{user_info = UserInfo, pollers = #{}, client = ApiClient}}.
-spec init(hg_client_api:t()) -> {ok, state()}.
init(ApiClient) ->
{ok, #state{pollers = #{}, client = ApiClient}}.
-spec handle_call(term(), callref(), state()) -> {reply, term(), state()} | {noreply, state()}.
handle_call({call, Function, Args}, _From, St = #state{user_info = UserInfo, client = Client}) ->
{Result, ClientNext} = hg_client_api:call(invoice_templating, Function, [UserInfo | Args], Client),
handle_call({call, Function, Args}, _From, St = #state{client = Client}) ->
{Result, ClientNext} = hg_client_api:call(invoice_templating, Function, with_user_info(Args), Client),
{reply, Result, St#state{client = ClientNext}};
handle_call({pull_event, InvoiceID, Timeout}, _From, St = #state{client = Client}) ->
Poller = get_poller(InvoiceID, St),
@ -143,14 +136,17 @@ code_change(_OldVsn, _State, _Extra) ->
%%
get_poller(ID, #state{user_info = UserInfo, pollers = Pollers}) ->
maps:get(ID, Pollers, construct_poller(UserInfo, ID)).
get_poller(ID, #state{pollers = Pollers}) ->
maps:get(ID, Pollers, construct_poller(ID)).
set_poller(ID, Poller, St = #state{pollers = Pollers}) ->
St#state{pollers = maps:put(ID, Poller, Pollers)}.
construct_poller(UserInfo, ID) ->
construct_poller(ID) ->
hg_client_event_poller:new(
{invoice_templating, 'GetEvents', [UserInfo, ID]},
{invoice_templating, 'GetEvents', with_user_info([ID])},
fun(Event) -> Event#payproc_Event.id end
).
with_user_info(Args) ->
[undefined | Args].

View File

@ -3,7 +3,6 @@
-include_lib("damsel/include/dmsl_payment_processing_thrift.hrl").
-export([start/1]).
-export([start/2]).
-export([start_link/1]).
-export([stop/1]).
@ -63,7 +62,6 @@
%%
-type user_info() :: dmsl_payment_processing_thrift:'UserInfo'().
-type invoice_id() :: dmsl_domain_thrift:'InvoiceID'().
-type invoice_state() :: dmsl_payment_processing_thrift:'Invoice'().
-type payment() :: dmsl_domain_thrift:'InvoicePayment'().
@ -102,18 +100,14 @@
-spec start(hg_client_api:t()) -> pid().
start(ApiClient) ->
start(start, undefined, ApiClient).
-spec start(user_info(), hg_client_api:t()) -> pid().
start(UserInfo, ApiClient) ->
start(start, UserInfo, ApiClient).
start(start, ApiClient).
-spec start_link(hg_client_api:t()) -> pid().
start_link(ApiClient) ->
start(start_link, undefined, ApiClient).
start(start_link, ApiClient).
start(Mode, UserInfo, ApiClient) ->
{ok, Pid} = gen_server:Mode(?MODULE, {UserInfo, ApiClient}, []),
start(Mode, ApiClient) ->
{ok, Pid} = gen_server:Mode(?MODULE, ApiClient, []),
Pid.
-spec stop(pid()) -> ok.
@ -317,7 +311,6 @@ map_result_error({error, Error}) ->
-type event() :: dmsl_payment_processing_thrift:'Event'().
-record(state, {
user_info :: user_info(),
pollers :: #{invoice_id() => hg_client_event_poller:st(event())},
client :: hg_client_api:t()
}).
@ -325,13 +318,13 @@ map_result_error({error, Error}) ->
-type state() :: #state{}.
-type callref() :: {pid(), Tag :: reference()}.
-spec init({user_info(), hg_client_api:t()}) -> {ok, state()}.
init({UserInfo, ApiClient}) ->
{ok, #state{user_info = UserInfo, pollers = #{}, client = ApiClient}}.
-spec init(hg_client_api:t()) -> {ok, state()}.
init(ApiClient) ->
{ok, #state{pollers = #{}, client = ApiClient}}.
-spec handle_call(term(), callref(), state()) -> {reply, term(), state()} | {noreply, state()}.
handle_call({call, Function, Args}, _From, St = #state{user_info = UserInfo, client = Client}) ->
{Result, ClientNext} = hg_client_api:call(invoicing, Function, [UserInfo | Args], Client),
handle_call({call, Function, Args}, _From, St = #state{client = Client}) ->
{Result, ClientNext} = hg_client_api:call(invoicing, Function, with_user_info(Args), Client),
{reply, Result, St#state{client = ClientNext}};
handle_call({pull_event, InvoiceID, Timeout}, _From, St = #state{client = Client}) ->
Poller = get_poller(InvoiceID, St),
@ -369,14 +362,17 @@ code_change(_OldVsn, _State, _Extra) ->
%%
get_poller(InvoiceID, #state{user_info = UserInfo, pollers = Pollers}) ->
maps:get(InvoiceID, Pollers, construct_poller(UserInfo, InvoiceID)).
get_poller(InvoiceID, #state{pollers = Pollers}) ->
maps:get(InvoiceID, Pollers, construct_poller(InvoiceID)).
set_poller(InvoiceID, Poller, St = #state{pollers = Pollers}) ->
St#state{pollers = maps:put(InvoiceID, Poller, Pollers)}.
construct_poller(UserInfo, InvoiceID) ->
construct_poller(InvoiceID) ->
hg_client_event_poller:new(
{invoicing, 'GetEvents', [UserInfo, InvoiceID]},
{invoicing, 'GetEvents', with_user_info([InvoiceID])},
fun(Event) -> Event#payproc_Event.id end
).
with_user_info(Args) ->
[undefined | Args].

View File

@ -12,8 +12,7 @@
-type handler_opts() :: #{
handler := module(),
party_client => party_client:client(),
default_handling_timeout => timeout(),
user_identity => undefined | woody_user_identity:user_identity()
default_handling_timeout => timeout()
}.
-type client_opts() :: #{
@ -115,23 +114,10 @@ create_context(WoodyContext, Opts) ->
configure_party_client(Context, Opts).
configure_party_client(Context0, #{party_client := PartyClient}) ->
DefaultUserInfo = #{id => <<"hellgate">>, realm => <<"service">>},
Context1 = set_default_party_user_identity(DefaultUserInfo, Context0),
hg_context:set_party_client(PartyClient, Context1);
hg_context:set_party_client(PartyClient, Context0);
configure_party_client(Context, _Opts) ->
Context.
set_default_party_user_identity(UserInfo, Context) ->
PartyClientContext0 = hg_context:get_party_client_context(Context),
PartyClientContext1 =
case party_client_context:get_user_info(PartyClientContext0) of
undefined ->
party_client_context:set_user_info(UserInfo, PartyClientContext0);
_UserInfo ->
PartyClientContext0
end,
hg_context:set_party_client_context(PartyClientContext1, Context).
-spec ensure_woody_deadline_set(woody_context:ctx(), handler_opts()) -> woody_context:ctx().
ensure_woody_deadline_set(WoodyContext, Opts) ->
case woody_context:get_deadline(WoodyContext) of

View File

@ -38,13 +38,13 @@ services:
retries: 10
machinegun:
image: docker.io/rbkmoney/machinegun:c05a8c18cd4f7966d70b6ad84cac9429cdfe37ae
image: ghcr.io/valitydev/machinegun:sha-7f0a21a
command: /opt/machinegun/bin/machinegun foreground
volumes:
- ./test/machinegun/config.yaml:/opt/machinegun/etc/config.yaml
- ./test/machinegun/cookie:/opt/machinegun/etc/cookie
healthcheck:
test: "curl http://localhost:8022/"
test: "/opt/machinegun/bin/machinegun ping"
interval: 5s
timeout: 1s
retries: 20
@ -82,10 +82,10 @@ services:
test: "curl http://localhost:8023/actuator/health"
interval: 5s
timeout: 1s
retries: 20
retries: 40
party-management:
image: ghcr.io/valitydev/party-management:sha-f757b79
image: ghcr.io/valitydev/party-management:sha-76058e0
command: /opt/party-management/bin/party-management foreground
depends_on:
machinegun:

View File

@ -30,7 +30,6 @@
{gproc, "0.9.0"},
{genlib, {git, "https://github.com/valitydev/genlib.git", {branch, "master"}}},
{woody, {git, "https://github.com/valitydev/woody_erlang.git", {branch, "master"}}},
{woody_user_identity, {git, "https://github.com/valitydev/woody_erlang_user_identity.git", {branch, "master"}}},
{damsel, {git, "https://github.com/valitydev/damsel.git", {branch, "master"}}},
{payproc_errors, {git, "https://github.com/valitydev/payproc-errors-erlang.git", {branch, "master"}}},
{mg_proto, {git, "https://github.com/valitydev/machinegun-proto.git", {branch, "master"}}},

View File

@ -48,7 +48,7 @@
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.1">>},2},
{<<"party_client">>,
{git,"https://github.com/valitydev/party-client-erlang.git",
{ref,"602d4dc87b54d2bf899ae36462853f7d7eb014ae"}},
{ref,"31850a63f6c00da7e10897b23298ad38f9bf448d"}},
0},
{<<"payproc_errors">>,
{git,"https://github.com/valitydev/payproc-errors-erlang.git",
@ -72,10 +72,6 @@
{<<"woody">>,
{git,"https://github.com/valitydev/woody_erlang.git",
{ref,"6f818c57e3b19f96260b1f968115c9bc5bcad4d2"}},
0},
{<<"woody_user_identity">>,
{git,"https://github.com/valitydev/woody_erlang_user_identity.git",
{ref,"a480762fea8d7c08f105fb39ca809482b6cb042e"}},
0}]}.
[
{pkg_hash,[