documentverification/verifier/views.py

171 lines
5.5 KiB
Python

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)