U
    ÔÉ>i  ã                   @   s€   d dl mZmZmZ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mZ d dlmZ d dlmZ G d	d
„ d
eƒZdS )é    )ÚAnyÚDictÚOptionalÚTuple)ÚSessionBase)ÚHttpRequest)Úget_authorization_credential)Úapp_settings)Ú
sessionkit)ÚAbstractTokenStrategy)Úinternalc                       sÀ   e Zd Zeee dœ‡ fdd„Zedœdd„Zeedœdd„Zeee	ee
f  dœ‡ fd	d
„Zeee dœdd„Zeee dœdd„Ze	ee
f dœdd„Zeeeeef  dœdd„Z‡  ZS )ÚJWTTokenStrategy)ÚrequestÚreturnc                    s4   t ƒ  |¡}|r|S |  |¡}|s&d S t |d ¡S )NZsid)ÚsuperÚget_session_tokenÚ_get_access_tokenr   Zsession_key_from_sid)Úselfr   ÚretÚpayload©Ú	__class__© úS/tmp/pip-unpacked-wheel-upujnpc2/allauth/headless/tokens/strategies/jwt/strategy.pyr      s    
z"JWTTokenStrategy.get_session_token)r   c                 C   s6   t |tjƒ}|d krd S t |¡}|d kr.d S |d S )Né   )r   r	   ZJWT_AUTHORIZATION_HEADER_SCHEMEr   Zvalidate_access_token)r   r   Úaccess_tokenZuser_payloadr   r   r   r      s     ÿ
z"JWTTokenStrategy._get_access_tokenc                 C   s8   |j jst‚|jjs|j ¡  |jj}t|tƒs4t‚|S ©N)ÚuserÚis_authenticatedÚAssertionErrorÚsessionZsession_keyÚsaveÚ
isinstanceÚstr)r   r   Úkeyr   r   r   Úcreate_session_token"   s    
z%JWTTokenStrategy.create_session_tokenc                    s,   t ƒ  |¡}|d k	r(t |j|j¡|d< |S )NÚrefresh_token)r   Úcreate_access_token_payloadr   Úcreate_refresh_tokenr   r    )r   r   r   r   r   r   r'   +   s     ÿz,JWTTokenStrategy.create_access_token_payload)Úsession_tokenr   c                 C   s
   t  |¡S r   )r
   Úlookup_session)r   r)   r   r   r   r*   5   s    zJWTTokenStrategy.lookup_sessionc                 C   s   |   |j¡}t |j|j|¡S r   )Ú
get_claimsr   r   Úcreate_access_tokenr    )r   r   Zclaimsr   r   r   r,   8   s    z$JWTTokenStrategy.create_access_token)r   c                 C   s   i S )aD  
        Returns additional claims to be included in the access token.  Note that
        the following claims are reserved and will be automatically set by allauth regardless of what you return:
         - ``iat``
         - ``exp``
         - ``sid``
         - ``jti``
         - ``token_use``
         - ``sub``
        r   )r   r   r   r   r   r+   <   s    zJWTTokenStrategy.get_claims)r&   r   c                 C   sh   t  |¡}|d krd S |\}}}t  |||  |¡¡}tjrTt  ||¡ t  ||¡}n|}| ¡  ||fS r   )	r   Zvalidate_refresh_tokenr,   r+   r	   ZJWT_ROTATE_REFRESH_TOKENZinvalidate_refresh_tokenr(   r!   )r   r&   Zuser_session_payloadr   r    r   r   Znext_refresh_tokenr   r   r   r&   I   s    

  ÿzJWTTokenStrategy.refresh_token)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r   r   r%   r   r   r'   r   r*   r,   r+   r   r&   Ú__classcell__r   r   r   r   r      s   	
þ
r   N)Útypingr   r   r   r   Z%django.contrib.sessions.backends.baser   Zdjango.httpr   Zallauth.core.internal.httpkitr   Zallauth.headlessr	   Zallauth.headless.internalr
   Z'allauth.headless.tokens.strategies.baser   Z&allauth.headless.tokens.strategies.jwtr   r   r   r   r   r   Ú<module>   s   