Commit fe3a92ec authored by Romain Courteaud's avatar Romain Courteaud 🐙

slapos_panel: create temp subscription request with shadow user

It prevents Unauthorized, as only owner can access the temp object
parent 8ec04006
...@@ -6,47 +6,49 @@ assert web_site is not None ...@@ -6,47 +6,49 @@ assert web_site is not None
# compatible with external providers # compatible with external providers
person = portal.portal_membership.getAuthenticatedMember().getUserValue() person = portal.portal_membership.getAuthenticatedMember().getUserValue()
# Fetch to know if the subscription request is already created # Use proper acquisiton to generate the payment transaction
subscription_request = portal.portal_catalog.getResultValue( person = web_site.restrictedTraverse(person.getRelativeUrl())
def wrapWithShadowToNotGetUnauthorized(person):
# Fetch to know if the subscription request is already created
subscription_request = portal.portal_catalog.getResultValue(
portal_type='Subscription Request', portal_type='Subscription Request',
aggregate__uid=context.getUid()) aggregate__uid=context.getUid())
if subscription_request is not None: if subscription_request is not None:
if subscription_request.getSimulationState() != 'submitted': if subscription_request.getSimulationState() != 'submitted':
# No need to continue if the subscription is already processed. # No need to continue if the subscription is already processed.
raise ValueError('No deposit is required, Subscription Request is not on submitted state') raise ValueError('No deposit is required, Subscription Request is not on submitted state')
else: else:
subscription_request = context.Item_createSubscriptionRequest(temp_object=True) subscription_request = context.Item_createSubscriptionRequest(temp_object=True)
if subscription_request is None: if subscription_request is None:
raise ValueError("Subscription Request was not found or generated") raise ValueError("Subscription Request was not found or generated")
outstanding_amount_list = person.Entity_getOutstandingDepositAmountList( outstanding_amount_list = person.Entity_getOutstandingDepositAmountList(
ledger_uid=subscription_request.getLedgerUid(), ledger_uid=subscription_request.getLedgerUid(),
source_section_uid=subscription_request.getSourceSectionUid(), section_uid=subscription_request.getSourceSectionUid(),
resource_uid=subscription_request.getPriceCurrencyUid()) resource_uid=subscription_request.getPriceCurrencyUid())
if subscription_request.isTempObject(): if subscription_request.isTempObject():
outstanding_amount_list.append( outstanding_amount_list.append(
#subscription_request
subscription_request.asContext( subscription_request.asContext(
total_price=subscription_request.getPrice(None)) total_price=subscription_request.getPrice(None))
) )
payment_mode = subscription_request.Base_getPaymentModeForCurrency( payment_mode = subscription_request.Base_getPaymentModeForCurrency(
subscription_request.getPriceCurrencyUid()) subscription_request.getPriceCurrencyUid())
def wrapWithShadow(person, outstanding_amount_list, payment_mode):
return person.Entity_createDepositPaymentTransaction( return person.Entity_createDepositPaymentTransaction(
subscription_list=outstanding_amount_list, subscription_list=outstanding_amount_list,
payment_mode=payment_mode payment_mode=payment_mode
) )
# Use proper acquisiton to generate the payment transaction
person = web_site.restrictedTraverse(person.getRelativeUrl())
payment_transaction = person.Person_restrictMethodAsShadowUser( payment_transaction = person.Person_restrictMethodAsShadowUser(
shadow_document=person, shadow_document=person,
callable_object=wrapWithShadow, callable_object=wrapWithShadowToNotGetUnauthorized,
argument_list=[person, outstanding_amount_list, payment_mode]) argument_list=[person])
return payment_transaction.PaymentTransaction_redirectToManualPayment() return payment_transaction.PaymentTransaction_redirectToManualPayment()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment