
    P1i
                         d dl mZ d dlmZ ddlmZ ddlmZ ddlm	Z	 ddl
Z
ddlZ e
j                  e      Z e       Z G d d	      Z G d
 d      Zy)   )Visitor)utils    )timezone)get_user_model)cacheNc                       e Zd Zd Zd Zy)VisitorTrackingMiddlewarec                     || _         y Nget_responseselfr   s     1/home/cursorai/projects/iching/main/middleware.py__init__z"VisitorTrackingMiddleware.__init__   
    (    c                 <   t        |j                  d   |j                  j                  dd      |j                  t	        j
                  |            }|j                          | j                  |      }|j                  dt	        j
                  |      d       |S )NREMOTE_ADDRHTTP_USER_AGENT )
ip_address
user_agentvisited_urluuidX_UUIDi3)max_age)	r   METAgetpathr   getUUIDsaver   
set_cookie)r   requestvisitorresponses       r   __call__z"VisitorTrackingMiddleware.__call__   s    ||M2||''(92>w'	
 	 $$W-HemmG&<lSr   N)__name__
__module____qualname__r   r(    r   r   r
   r
      s    )r   r
   c                   (    e Zd ZdZd Zd Zd Zd Zy)UserActivityMiddlewarea=  
    Middleware to track user activity as a fallback when signals don't work.
    
    This should only be used as a fallback since the primary activity tracking
    happens via authentication signals (user_logged_in, jwt_authenticated).
    
    Updated to track ALL requests without cache timeout as requested.
    c                     || _         y r   r   r   s     r   r   zUserActivityMiddleware.__init__*   r   r   c                     | j                  |      }t        |d      rB|j                  j                  r,| j	                  |      r| j                  |j                         |S )Nuser)r   hasattrr1   is_authenticatedshould_track_requestupdate_user_activity)r   r%   r'   s      r   r(   zUserActivityMiddleware.__call__-   sO    $$W- 7F#(E(E((1))',,7r   c                 X    |j                   }g d}|D ]  }|j                  |      s y y)z<
        Determine if we should track this request.
        )z/static/z/media/z/favicon.icoz/robots.txtz/__debug__/FT)r!   
startswith)r   r%   r!   excluded_pathsexcludeds        r   r4   z+UserActivityMiddleware.should_track_request7   s4     ||
 'Hx( ' r   c                 Z   	 t         j                  j                  |j                        j	                  t        j                                t        j                  d|j                   d       y# t        $ r/}t        j                  d|j                   d|        Y d}~yd}~ww xY w)z
        Update user's last activity without any cache timeout.
        All requests will update activity as requested.
        )pk)last_active_datezUpdated activity for user z via middleware fallbackz&Error updating user activity for user z: N)Userobjectsfilterr;   updater   nowloggerdebug	Exceptionerror)r   r1   es      r   r5   z+UserActivityMiddleware.update_user_activityL   s    
		RLL477+22!) 3  LL5dggY>VWX 	RLLA$''"QCPQQ	Rs   A/A2 2	B*;%B%%B*N)r)   r*   r+   __doc__r   r(   r4   r5   r,   r   r   r.   r.       s    )*Rr   r.   )visitor.visitorr   r&   r   django.utilsr   django.contrib.authr   django.core.cacher   loggingjson	getLoggerr)   rB   r=   r
   r.   r,   r   r   <module>rO      sJ    $  ! . #  			8	$ &:R :Rr   