|
@@ -5,7 +5,42 @@ from django.utils import timezone
|
|
from misago.users.models import Online
|
|
from misago.users.models import Online
|
|
|
|
|
|
|
|
|
|
-def mute_tracker(request):
|
|
|
|
|
|
+def unwrap_drf_request(f):
|
|
|
|
+ """utility decorator that unwraps django request from rest frameworks wrapper"""
|
|
|
|
+ def unwrapped_request_view(request, *args, **kwargs):
|
|
|
|
+ if isinstance(request, Request):
|
|
|
|
+ request = request._request
|
|
|
|
+ return f(request, *args, **kwargs)
|
|
|
|
+ return unwrapped_request_view
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@unwrap_drf_request
|
|
|
|
+def start_request_tracker(request):
|
|
|
|
+ if request.user.is_authenticated:
|
|
|
|
+ try:
|
|
|
|
+ request._misago_online_tracker = request.user.online_tracker
|
|
|
|
+ except Online.DoesNotExist:
|
|
|
|
+ start_tracking(request, request.user)
|
|
|
|
+ else:
|
|
|
|
+ request._misago_online_tracker = None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@unwrap_drf_request
|
|
|
|
+def update_request_tracker(request):
|
|
|
|
+ try:
|
|
|
|
+ online_tracker = request._misago_online_tracker
|
|
|
|
+ except AttributeError:
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ if online_tracker:
|
|
|
|
+ if request.user.is_anonymous:
|
|
|
|
+ stop_tracking(request, online_tracker)
|
|
|
|
+ else:
|
|
|
|
+ update_tracking(request, online_tracker)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@unwrap_drf_request
|
|
|
|
+def clear_request_tracker(request):
|
|
request._misago_online_tracker = None
|
|
request._misago_online_tracker = None
|
|
|
|
|
|
|
|
|
|
@@ -19,23 +54,17 @@ def start_tracking(request, user):
|
|
request._misago_online_tracker = online_tracker
|
|
request._misago_online_tracker = online_tracker
|
|
|
|
|
|
|
|
|
|
-def update_tracker(request, tracker):
|
|
|
|
- tracker.current_ip = request.user_ip
|
|
|
|
- tracker.last_click = timezone.now()
|
|
|
|
|
|
+def update_tracking(request, online_tracker):
|
|
|
|
+ online_tracker.current_ip = request.user_ip
|
|
|
|
+ online_tracker.last_click = timezone.now()
|
|
|
|
|
|
- tracker.save(update_fields=['last_click', 'current_ip'])
|
|
|
|
|
|
+ online_tracker.save(update_fields=['last_click', 'current_ip'])
|
|
|
|
|
|
|
|
|
|
-def stop_tracking(request, tracker):
|
|
|
|
- user = tracker.user
|
|
|
|
- user.last_login = tracker.last_click
|
|
|
|
- user.last_ip = tracker.current_ip
|
|
|
|
|
|
+def stop_tracking(request, online_tracker):
|
|
|
|
+ user = online_tracker.user
|
|
|
|
+ user.last_login = online_tracker.last_click
|
|
|
|
+ user.last_ip = online_tracker.current_ip
|
|
user.save(update_fields=['last_login', 'last_ip'])
|
|
user.save(update_fields=['last_login', 'last_ip'])
|
|
|
|
|
|
- tracker.delete()
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-def clear_tracking(request):
|
|
|
|
- if isinstance(request, Request):
|
|
|
|
- request = request._request # Fugly unwrap restframework's request
|
|
|
|
- request._misago_online_tracker = None
|
|
|
|
|
|
+ online_tracker.delete()
|