fix payment
This commit is contained in:
1 parent
4f7486152c
commit
bb3ddd1610
47 files changed
+2137
-51
No files matched your search
@@ -19,6 +19,7 @@ from . import policies
|
||||
from .models import PaymentAccessLink, PaymentNotice
|
||||
|
||||
SESSION_KEY = 'payment_access_link_id'
|
||||
SHARE_SESSION_KEY = 'payment_page_share'
|
||||
|
||||
|
||||
def token_digest(token):
|
||||
@@ -44,6 +45,24 @@ def issue_payment_link(*, notice=None, receipt=None):
|
||||
raise RuntimeError('عدم موفقیت در تولید لینک یکتای پرداخت.')
|
||||
|
||||
|
||||
def notice_share_url(request, notice):
|
||||
"""Reuse a validated capability; only a logged-in owner can issue a new one."""
|
||||
shared = request.session.get(SHARE_SESSION_KEY, {})
|
||||
token = shared.get('token', '')
|
||||
link = active_links().filter(pk=shared.get('link_id'), notice=notice,
|
||||
token_hash=token_digest(token)).first() if token else None
|
||||
grant = getattr(request, 'payment_access_link', None)
|
||||
if grant and (link is None or link.pk != grant.pk):
|
||||
raise PermissionDenied('برای کپی لینک، دوباره لینک پرداخت دریافتی را باز کنید.')
|
||||
if link is None:
|
||||
from .services import audit
|
||||
link, url = issue_payment_link(notice=notice)
|
||||
token = url.rstrip('/').rsplit('/', 1)[-1]
|
||||
request.session[SHARE_SESSION_KEY] = {'link_id': link.pk, 'token': token}
|
||||
audit(request.user, 'PAYMENT_LINK_CREATED', link)
|
||||
return settings.PUBLIC_BASE_URL.rstrip('/') + reverse('payment_short_link', args=[token])
|
||||
|
||||
|
||||
def active_links():
|
||||
return PaymentAccessLink.objects.select_related('customer', 'notice', 'receipt').filter(
|
||||
notice__deleted_at__isnull=True,
|
||||
|
||||
Reference in new issue
Block a user