mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-16 18:36:18 +00:00
59 lines
2.6 KiB
Python
59 lines
2.6 KiB
Python
"""middleware file"""
|
|
"""Django import"""
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from rest_framework.renderers import JSONRenderer
|
|
"""App django"""
|
|
from account.utils import custom_error_response
|
|
from account.models import UserDeviceDetails
|
|
from base.messages import ERROR_CODE, SUCCESS_CODE
|
|
from base.constants import NUMBER
|
|
from junior.models import Junior
|
|
from guardian.models import Guardian
|
|
# Custom middleware
|
|
# when user login with
|
|
# multiple device simultaneously
|
|
# It restricted login in
|
|
# multiple devices only
|
|
# user can login in single
|
|
# device at a time"""
|
|
|
|
def custom_response(custom_error):
|
|
"""custom response"""
|
|
response = Response(custom_error.data, status=status.HTTP_404_NOT_FOUND)
|
|
# Set content type header to "application/json"
|
|
response['Content-Type'] = 'application/json'
|
|
# Render the response as JSON
|
|
renderer = JSONRenderer()
|
|
response.content = renderer.render(response.data)
|
|
return response
|
|
class CustomMiddleware(object):
|
|
"""Custom middleware"""
|
|
def __init__(self, get_response):
|
|
"""response"""
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
# Code to be executed before the view is called
|
|
response = self.get_response(request)
|
|
# Code to be executed after the view is called
|
|
device_id = request.META.get('HTTP_DEVICE_ID')
|
|
user_type = request.META.get('HTTP_USER_TYPE')
|
|
if request.user.is_authenticated:
|
|
"""device details"""
|
|
device_details = UserDeviceDetails.objects.filter(user=request.user, device_id=device_id).last()
|
|
if user_type and str(user_type) == str(NUMBER['one']):
|
|
junior = Junior.objects.filter(auth=request.user, is_active=False).last()
|
|
if junior:
|
|
custom_error = custom_error_response(ERROR_CODE['2075'], response_status=status.HTTP_404_NOT_FOUND)
|
|
response = custom_response(custom_error)
|
|
elif user_type and str(user_type) == str(NUMBER['two']):
|
|
guardian = Guardian.objects.filter(user=request.user, is_active=False).last()
|
|
if guardian:
|
|
custom_error = custom_error_response(ERROR_CODE['2075'], response_status=status.HTTP_404_NOT_FOUND)
|
|
response = custom_response(custom_error)
|
|
if device_id and not device_details:
|
|
custom_error = custom_error_response(ERROR_CODE['2037'], response_status=status.HTTP_404_NOT_FOUND)
|
|
response = custom_response(custom_error)
|
|
return response
|