93 lines
3.5 KiB
Python
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
|
|
|