Files
tripwithbonus/AuthApp/middleware.py
SDE fe7721270b 0.8.9
fix ResponseInterceptionMiddleware
2023-12-01 02:07:17 +03:00

93 lines
3.5 KiB
Python

import json
import datetime
from django.http import HttpResponse, JsonResponse
from django.conf import settings
from django.utils.deprecation import MiddlewareMixin
def set_cookie(response, key, value, days_expire=7):
if days_expire is None:
max_age = 365 * 24 * 60 * 60 # one year
else:
max_age = days_expire * 24 * 60 * 60
expires = datetime.datetime.strftime(
datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age),
"%a, %d-%b-%Y %H:%M:%S GMT",
)
response.set_cookie(
key,
value,
max_age=max_age,
expires=expires,
domain=settings.SESSION_COOKIE_DOMAIN,
secure=settings.SESSION_COOKIE_SECURE or None,
)
return response
class ResponseInterceptionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
for_save_to_session = None
try:
if type(response) == JsonResponse:
if request.user and not request.user.is_anonymous and request.user.user_profile:
for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
if for_save_to_session:
data = json.loads(response.content)
data.update(for_save_to_session)
response.content = json.dumps(data)
except Exception as e:
msg = f'ResponseInterceptionMiddleware error = {str(e)}'
print(msg)
# if 'errors' in response.data:
# response.data.update({'success': False})
# print(response.data)
return response
# def process_view(self, request, view_func, *view_args, **view_kwargs):
#
# request.META.update({'ws_port': settings.WS_PORT})
#
# # if request.user.is_authenticated and request.body:
# # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# # if for_save_to_session:
# # data = json.loads(request.body)
# # data.update(for_save_to_session)
# #
# # # request_data = getattr(request, '_body', request.body)
# # # request_data = json.loads(request_data)
# # # # here you can write the logic to append the payload to request data
# # request._body = json.dumps(data)
# return None
# def __call__(self, request):
# # Code to be executed for each request before
# # the view (and later middleware) are called.
#
# if request.user.is_authenticated and request.body:
# for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# if for_save_to_session:
# data = json.loads(request.body)
# data.update(for_save_to_session)
# request._body = json.dumps(data)
# # return JsonResponse(data)
# # request = request.user.user_profile.save_user_alerts_to_session(request)
#
# response = self.get_response(request)
# # if request.user.is_authenticated:
# # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session')
# # if for_save_to_session:
# # for key, val in for_save_to_session.items():
# # set_cookie(response, key, json.dumps(val), 30)
#
# # Code to be executed for each request/response after
# # the view is called.
#
# return response