import json from django.shortcuts import render 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 from .services.cashfree_client import CashfreeSecureIDClient def get_cashfree_client(request): """ Instantiate client using session-stored override credentials if available, otherwise fallback to environment variables. """ client_id = request.session.get('CASHFREE_CLIENT_ID') client_secret = request.session.get('CASHFREE_CLIENT_SECRET') environment = request.session.get('CASHFREE_ENV', 'TEST') return CashfreeSecureIDClient( client_id=client_id, client_secret=client_secret, environment=environment ) def index_view(request): """ Main Web Application Dashboard UI. """ client = get_cashfree_client(request) context = { "client_id": client.client_id, "environment": client.environment, "has_credentials": client.has_credentials(), } return render(request, "verifier/index.html", context) @api_view(['GET', 'POST']) def config_api_view(request): """ API to fetch or update active Cashfree credentials and environment configuration. """ if request.method == 'GET': client = get_cashfree_client(request) return Response({ "client_id": client.client_id, "has_credentials": client.has_credentials(), "environment": client.environment, "base_url": client.base_url }) elif request.method == 'POST': data = request.data or {} client_id = data.get('client_id', '').strip() client_secret = data.get('client_secret', '').strip() environment = data.get('environment', 'TEST').upper() request.session['CASHFREE_CLIENT_ID'] = client_id request.session['CASHFREE_CLIENT_SECRET'] = client_secret request.session['CASHFREE_ENV'] = environment client = CashfreeSecureIDClient(client_id=client_id, client_secret=client_secret, environment=environment) verify_res = client.verify_credentials() if client.has_credentials() else {"success": False, "message": "No credentials provided"} return Response({ "message": "Configuration updated successfully", "client_id": client.client_id, "environment": client.environment, "has_credentials": client.has_credentials(), "credential_check": verify_res }) @api_view(['POST']) def verify_pan_api(request): """ POST /api/verify/pan/ Verify PAN details (Individual / Business). """ data = request.data or {} pan = data.get('pan', '') name = data.get('name', '') pan_type = data.get('type', 'INDIVIDUAL') if not pan: return Response({ "error": "PAN parameter is required.", "field": "pan" }, status=status.HTTP_400_BAD_REQUEST) client = get_cashfree_client(request) result = client.verify_pan(pan=pan, name=name, pan_type=pan_type) return Response(result) @api_view(['POST']) def verify_aadhaar_api(request): """ POST /api/verify/aadhaar/ Verify Aadhaar details or execute Aadhaar masking. """ data = request.data or {} aadhaar_number = data.get('aadhaar_number', '') action = data.get('action', 'verify') # 'verify' or 'mask' if not aadhaar_number: return Response({ "error": "Aadhaar number parameter is required.", "field": "aadhaar_number" }, status=status.HTTP_400_BAD_REQUEST) client = get_cashfree_client(request) result = client.verify_aadhaar(aadhaar_number=aadhaar_number, action=action) return Response(result) @api_view(['POST']) def verify_gstin_api(request): """ POST /api/verify/gstin/ Verify Goods and Services Tax Identification Number (GSTIN). """ data = request.data or {} gstin = data.get('gstin', '') if not gstin: return Response({ "error": "GSTIN parameter is required.", "field": "gstin" }, status=status.HTTP_400_BAD_REQUEST) client = get_cashfree_client(request) result = client.verify_gstin(gstin=gstin) return Response(result) @api_view(['POST']) def verify_ifsc_api(request): """ POST /api/verify/ifsc/ Lookup bank details, branch address, and supported payment modes using IFSC code. """ data = request.data or {} ifsc = data.get('ifsc', '') if not ifsc: return Response({ "error": "IFSC code parameter is required.", "field": "ifsc" }, status=status.HTTP_400_BAD_REQUEST) client = get_cashfree_client(request) result = client.verify_ifsc(ifsc=ifsc) return Response(result) @api_view(['POST']) def verify_bank_account_api(request): """ POST /api/verify/bank-account/ Synchronous Bank Account Verification (BAV Sync). """ data = request.data or {} bank_account = data.get('bank_account', '') ifsc = data.get('ifsc', '') name = data.get('name', '') phone = data.get('phone', '') if not bank_account or not ifsc: return Response({ "error": "Both bank_account and ifsc parameters are required.", "fields": ["bank_account", "ifsc"] }, status=status.HTTP_400_BAD_REQUEST) client = get_cashfree_client(request) result = client.verify_bank_account(bank_account=bank_account, ifsc=ifsc, name=name, phone=phone) return Response(result)