from django.conf import settings from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import status import jwt import datetime import requests @csrf_exempt @api_view(['POST']) def generate_jwt_token(request): # Vérifier la clé API api_key = request.headers.get('X-Auth-Token') print(f'api_key : {api_key}') print(f'settings.DOCUSEAL_JWT["API_KEY"] : {settings.DOCUSEAL_JWT["API_KEY"]}') if not api_key or api_key != settings.DOCUSEAL_JWT["API_KEY"]: return Response({'error': 'Invalid API key'}, status=status.HTTP_401_UNAUTHORIZED) # Récupérer les données de la requête user_email = request.data.get('user_email') documents_urls = request.data.get('documents_urls', []) template_id = request.data.get('template_id') # Récupérer le template_id # Vérifier les données requises if not user_email: return Response({'error': 'User email is required'}, status=status.HTTP_400_BAD_REQUEST) # Utiliser la configuration JWT de DocuSeal depuis les settings jwt_secret = settings.DOCUSEAL_JWT['API_KEY'] jwt_algorithm = settings.DOCUSEAL_JWT['ALGORITHM'] expiration_delta = settings.DOCUSEAL_JWT['EXPIRATION_DELTA'] # Définir le payload payload = { 'user_email': user_email, 'documents_urls': documents_urls, 'template_id': template_id, # Ajouter le template_id au payload 'exp': datetime.datetime.utcnow() + expiration_delta # Temps d'expiration du token } # Générer le token JWT token = jwt.encode(payload, jwt_secret, algorithm=jwt_algorithm) return Response({'token': token}, status=status.HTTP_200_OK) @csrf_exempt @api_view(['POST']) def clone_template(request): # Vérifier la clé API api_key = request.headers.get('X-Auth-Token') if not api_key or api_key != settings.DOCUSEAL_JWT["API_KEY"]: return Response({'error': 'Invalid API key'}, status=status.HTTP_401_UNAUTHORIZED) # Récupérer les données de la requête document_id = request.data.get('templateId') email = request.data.get('email') # Vérifier les données requises if not document_id or not email : return Response({'error': 'template ID, email are required'}, status=status.HTTP_400_BAD_REQUEST) # URL de l'API de DocuSeal pour cloner le template clone_url = f'https://docuseal.com/api/templates/{document_id}/clone' # Faire la requête pour cloner le template try: response = requests.post(clone_url, json={'submitters': [{'email': email}]}, headers={ 'Content-Type': 'application/json', 'X-Auth-Token': settings.DOCUSEAL_JWT['API_KEY'] }) if response.status_code != status.HTTP_200_OK: return Response({'error': 'Failed to clone template'}, status=response.status_code) data = response.json() return Response(data, status=status.HTTP_200_OK) except requests.RequestException as e: return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) @csrf_exempt @api_view(['DELETE']) def remove_template(request, id): # Vérifier la clé API api_key = request.headers.get('X-Auth-Token') if not api_key or api_key != settings.DOCUSEAL_JWT["API_KEY"]: return Response({'error': 'Invalid API key'}, status=status.HTTP_401_UNAUTHORIZED) # URL de l'API de DocuSeal pour cloner le template clone_url = f'https://docuseal.com/api/templates/{id}' # Faire la requête pour cloner le template try: response = requests.delete(clone_url, headers={ 'X-Auth-Token': settings.DOCUSEAL_JWT['API_KEY'] }) if response.status_code != status.HTTP_200_OK: return Response({'error': 'Failed to remove template'}, status=response.status_code) data = response.json() return Response(data, status=status.HTTP_200_OK) except requests.RequestException as e: return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)