"""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