Initial commit
This commit is contained in:
31
payment/permissions.py
Normal file
31
payment/permissions.py
Normal file
@@ -0,0 +1,31 @@
|
||||
from django.conf import settings
|
||||
from rest_framework.permissions import BasePermission
|
||||
|
||||
|
||||
class HasInternalServiceKey(BasePermission):
|
||||
"""
|
||||
برای endpointهایی مثل POST /api/payment/orders که طبق سند فقط قراره
|
||||
سرور-به-سرور (از اپ Subscription) صدا زده بشن، نه از یک کلاینت دلخواه.
|
||||
درخواست باید هدر X-Internal-Key رو برابر settings.INTERNAL_SERVICE_KEY
|
||||
بفرسته؛ در غیر این صورت 403 برمیگرده.
|
||||
"""
|
||||
|
||||
message = 'این endpoint فقط برای فراخوانی داخلی/سرور-به-سرور است.'
|
||||
|
||||
def has_permission(self, request, view):
|
||||
provided = request.headers.get('X-Internal-Key', '')
|
||||
return bool(provided) and provided == settings.INTERNAL_SERVICE_KEY
|
||||
|
||||
|
||||
class HasWebhookSecret(BasePermission):
|
||||
"""
|
||||
برای POST /api/payment/webhook: باید از سمت درگاه پرداخت بیاد، نه یک
|
||||
کلاینت دلخواه. تا زمان اتصال درگاه واقعی (که خودش امضای HMAC داره)،
|
||||
یک shared-secret ساده از طریق هدر X-Webhook-Secret بررسی میشه.
|
||||
"""
|
||||
|
||||
message = 'امضای وبهوک نامعتبر است.'
|
||||
|
||||
def has_permission(self, request, view):
|
||||
provided = request.headers.get('X-Webhook-Secret', '')
|
||||
return bool(provided) and provided == settings.PAYMENT_WEBHOOK_SECRET
|
||||
Reference in New Issue
Block a user