
    P1iG                     b    d Z ddlmZ ddlmZmZ ddlmZ  G d de      Z G d de      Z	d	 Z
y
)z
Custom JWT token classes for temporary users.

Provides permanent (never-expiring) JWT tokens specifically for temporary users
to ensure they have forever sessions as intended.
    )	timedelta)RefreshTokenAccessToken)api_settingsc                   "    e Zd ZdZ ed      Zy)PermanentAccessTokenz
    Access token that never expires - used for temporary users.
    
    This token has a very long lifetime (100 years) to ensure temporary users
    never have to deal with token expiration.
    锎  daysN)__name__
__module____qualname____doc__r   lifetime     -/home/cursorai/projects/iching/main/tokens.pyr   r      s     e$Hr   r   c                   6    e Zd ZdZ ed      ZeZed        Z	y)PermanentRefreshTokenz
    Refresh token that never expires - used for temporary users.
    
    This token has a very long lifetime (100 years) and generates
    PermanentAccessToken instances for access tokens.
    r	   r
   c                 8   | j                         }|j                  | j                  | j                   j                         | j                  j                         D ];  \  }}|t        j                  v r||t        j                  <   ,|dk(  r2|dvs7|||<   = |S )z
        Returns an access token created from this refresh token.
        Uses PermanentAccessToken for temporary users.
        )	from_timer   
token_type)expiatjti)access_token_classset_expcurrent_timer   payloaditemsr   USER_ID_CLAIM)selfaccessclaimvalues       r   access_tokenz"PermanentRefreshToken.access_token!   s     ((*!2!2T=T=T=]=]^ !LL..0LE52225:|112,&33 %u 1 r   N)
r   r   r   r   r   r   r   r   propertyr&   r   r   r   r   r      s+     e$H- r   r   c                 F   t        | dd      r8t        j                  |       }t        |j                        t        |      dddS t        j                  |       }t        |j                        t        |      t        t        j                  j                               ddS )a  
    Create appropriate JWT tokens for a user.
    
    Returns permanent tokens for temporary users, standard tokens for regular users.
    
    Args:
        user: User instance
        
    Returns:
        dict: Dictionary containing 'access' and 'refresh' token strings
    is_temporary_userFNT)r#   refresh
expires_inis_permanent)
getattrr   for_userstrr&   r   intr   ACCESS_TOKEN_LIFETIMEtotal_seconds)userr*   s     r   create_tokens_for_userr4   8   s     t(%0'006'../7| 	
 	
 ''-'../7|l@@NNPQ!	
 	
r   N)r   datetimer   rest_framework_simplejwt.tokensr   r   !rest_framework_simplejwt.settingsr   r   r   r4   r   r   r   <module>r8      s3     E :%; %L B
r   