testbed / ai_api /middleware.py
xspinners's picture
initial
090987a
# middleware.py
import hashlib
import hmac
from django.http import JsonResponse
from ai_api.models import APIClient
class HMACAuthMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# if request.path.startswith('/admin/'):
# return self.get_response(request)
if not request.path.startswith('/api/'):
return self.get_response(request)
client_id = request.headers.get('X-Client-ID')
signature = request.headers.get('X-Signature')
if not client_id or not signature:
return JsonResponse({'error': 'Missing credentials'}, status=401)
from ai_api.models import APIClient
try:
client = APIClient.objects.get(client_id=client_id)
except APIClient.DoesNotExist:
return JsonResponse({'error': 'Invalid client ID'}, status=401)
expected_signature = hmac.new(
client.secret_key.encode(),
request.body,
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected_signature, signature):
return JsonResponse({'error': 'Invalid signature'}, status=401)
request.api_client = client
return self.get_response(request)