]> git.parisson.com Git - teleforma.git/commitdiff
add LastUserActivityMiddleware to track user activity
authorGuillaume Pellerin <guillaume.pellerin@parisson.com>
Mon, 18 May 2026 08:24:13 +0000 (10:24 +0200)
committerGuillaume Pellerin <guillaume.pellerin@parisson.com>
Mon, 18 May 2026 08:24:13 +0000 (10:24 +0200)
app/settings.py
teleforma/middleware.py
teleforma/views/crfpa.py

index be381fc850eca5d5bc3d9b25b7dc0aef218f82d4..193a94d2373fb4fbee81cdbb58461bebddd1e5d0 100644 (file)
@@ -308,6 +308,7 @@ MIDDLEWARE = (('debug_toolbar.middleware.DebugToolbarMiddleware',) if DEBUG_TOOL
     'django.middleware.locale.LocaleMiddleware',
     'dj_pagination.middleware.PaginationMiddleware',
     'teleforma.middleware.XsSharing',
+    'teleforma.middleware.LastUserActivityMiddleware',
     'django_user_agents.middleware.UserAgentMiddleware',
     "django.middleware.common.CommonMiddleware",
 )
@@ -617,6 +618,8 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = 10240
 
 #THUMBNAIL_FORCE_OVERWRITE = True
 
+LAST_ACTIVITY_INTERVAL_SECS = 3600
+
 
 ########################
 # EMAIL
index 898bf3d9d9de751041f77fb3f6a201fc32e8babe..6fe9b45b251723ce50ccaa296c63b049856c605c 100644 (file)
@@ -1,7 +1,9 @@
-
-
-from django import http
+from datetime import timedelta
+from django.utils import timezone
 from django.conf import settings
+from django.db.models.expressions import F
+from django import http
+
 try:
     XS_SHARING_ALLOWED_ORIGINS = settings.XS_SHARING_ALLOWED_ORIGINS
     XS_SHARING_ALLOWED_METHODS = settings.XS_SHARING_ALLOWED_METHODS
@@ -52,3 +54,26 @@ class XsSharing:
             XS_SHARING_ALLOWED_HEADERS)
 
         return self.get_response(request)
+
+
+class LastUserActivityMiddleware:
+    KEY = "last-activity"
+
+    def __init__(self, get_response):
+        self.get_response = get_response
+
+    def __call__(self, request):
+        if request.user.is_authenticated:
+            last_activity = request.session.get(self.KEY)
+            too_old_time = timezone.now() - timedelta(seconds=settings.LAST_ACTIVITY_INTERVAL_SECS)
+
+            # Update database only if the session timestamp is old enough
+            if not last_activity or last_activity < too_old_time:
+                # Update your custom UserActivity or UserProfile model
+                request.user.useractivity.last_activity_date = timezone.now()
+                request.user.useractivity.save()
+
+            # Update the session timestamp
+            request.session[self.KEY] = timezone.now().isoformat()
+
+        return self.get_response(request)
\ No newline at end of file
index 0bb287dba1d958f0d75b08e639495f91579fe4d2..9cf737f87d41ffaa09621ec74472c725d25a826e 100644 (file)
@@ -1182,6 +1182,7 @@ class WriteView(PostmanWriteView):
 
         return context
 
+
 class CRFPAProfileView(ProfileView):
     """Provide Collections web UI methods"""