aboutsummaryrefslogtreecommitdiff
path: root/middleware/uuidmiddleware.py
blob: 90200e9788c1791af7150b1d1a5e6c72bb1af0b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# import json
# import uuid

# import redis
# import os
# from dotenv import load_dotenv

# load_dotenv()

# redis_instance = redis.StrictRedis(
#   host=os.getenv('REDIS_HOST'),
#   port=os.getenv('REDIS_PORT'),
#   password=os.getenv('REDIS_PASSWORD'),
#   db=0
# )

# class UserUUIDMiddleware:
#     # assign a uuid to the user if they don't have one
#     # store in cookies for 365 days
#     def __init__(self, get_response):
#         self.get_response = get_response
#         self.cookie_name = 'user_uuid'

#     def __call__(self, request):
#         if not request.COOKIES.get(self.cookie_name):
#             response = self.get_response(request)
#             response.set_cookie(self.cookie_name, uuid.uuid4(), max_age=31536000)
#             return response
#         return self.get_response(request)

# def userTrackingContextProcessor(request):
#     # ignore /rss/ path
#     if '/rss/' in request.path:
#         return {
#             'anonymous_users': 0,
#             'logged_in_users': 0,
#             'admin_users': 0,
#         }

#     # user tracking context processor - track 3 types of users (anonymous, logged in, admin)
#     # based on the user's uuid cookie. Only UUID are necessary to track online users. Then we
#     # separate them into anonymous, logged in, and admin users based on their permissions.

#     # get the user's uuid from the cookie
#     user_uuid = request.COOKIES.get('user_uuid')
#     user_data = {
#         'is_authenticated': request.user.is_authenticated,
#         'is_staff': request.user.is_staff,
#     }

#     redis_instance.set(f"presence_{user_uuid}", json.dumps(user_data), ex=300)

#     # get all online users
#     online_now = redis_instance.keys('presence_*')

#     # separate online users into anonymous, logged in, and admin users
#     anonymous_users = []
#     logged_in_users = []
#     admin_users = []

#     for user in online_now:
#         user_data = redis_instance.get(user)
#         user_data = json.loads(user_data)
#         if user_data['is_authenticated'] == False and user_data['is_staff'] == False:
#             anonymous_users.append(user_data)
#         elif user_data['is_authenticated'] == True and user_data['is_staff'] == False:
#             logged_in_users.append(user_data)
#         if user_data['is_staff'] == True:
#             admin_users.append(user_data)

#     an = len(anonymous_users)
#     lo = len(logged_in_users)
#     ad = len(admin_users)
#     if user_uuid is not None:
#         an = max((an - 1), 0) if lo + ad > 0 else max(an - 1, 1)

#     return {
#         'anonymous_users': an,
#         'logged_in_users': lo,
#         'admin_users': ad,
#     }