middleware.py
1.39 KB
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
"""
Middleware to register a log event for a session expire
Called before session_security package clears the session and log out the user
"""
from datetime import datetime, timedelta
from session_security.settings import EXPIRE_AFTER
from session_security.utils import get_last_activity, set_last_activity
from log.models import Log
from .models import User
from django.utils.translation import ugettext as _u
from channels import Group
import json
class SessionExpireMiddleware(object):
def process_request(self, request):
if not request.user.is_authenticated():
return
now = datetime.now()
if '_session_security' not in request.session:
return
delta = now - get_last_activity(request.session)
expire_seconds = EXPIRE_AFTER
if delta >= timedelta(seconds = expire_seconds):
log = Log()
log.user = str(request.user)
log.user_id = request.user.id
log.user_email = request.user.email
log.context = {'condition': 'session_expire'}
log.component = "user"
log.action = "logout"
log.resource = "system"
log.save()
users = User.objects.all().exclude(email = request.user.email)
notification = {
"type": "user_status",
"user_id": str(request.user.id),
"status": _u("Offline"),
"status_class": "",
"remove_class": "away"
}
notification = json.dumps(notification)
for u in users:
Group("user-%s" % u.id).send({'text': notification})