32 lines
1.4 KiB
Python
32 lines
1.4 KiB
Python
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
|