Initial commit - clean project structure

This commit is contained in:
2026-08-18 16:48:15 +03:30
commit 331148037e
147 changed files with 5543 additions and 0 deletions

31
payment/permissions.py Normal file
View 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