U
    Æ½„b7  ã                   @   s  d dl mZ d dlmZmZ d dlmZ d dlmZ	 d dl
mZmZ d dlmZ ddlmZ dd	lmZmZmZ ejr‚dd
lmZ G dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZ dS )é    )Úsettings)ÚauthenticateÚget_user_model)Úupdate_last_login)Úgettext_lazy)Ú
exceptionsÚserializers)ÚValidationErroré   )Úapi_settings)ÚRefreshTokenÚSlidingTokenÚUntypedToken)ÚBlacklistedTokenc                       s   e Zd Z‡ fdd„Z‡  ZS )ÚPasswordFieldc                    s2   |  di ¡ d|d d< d|d< tƒ j||Ž d S )NÚstyleÚpasswordZ
input_typeTZ
write_only)Ú
setdefaultÚsuperÚ__init__©ÚselfÚargsÚkwargs©Ú	__class__© úH/tmp/pip-unpacked-wheel-cvqxdfy5/rest_framework_simplejwt/serializers.pyr      s    zPasswordField.__init__)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__r   r   r   r   r      s   r   c                       sH   e Zd Zeƒ jZdZdedƒiZ‡ fdd„Z	dd„ Z
edd	„ ƒZ‡  ZS )
ÚTokenObtainSerializerNÚno_active_accountz2No active account found with the given credentialsc                    s.   t ƒ j||Ž t ¡ | j| j< tƒ | jd< d S )Nr   )r   r   r   Ú	CharFieldÚfieldsÚusername_fieldr   r   r   r   r   r   !   s    zTokenObtainSerializer.__init__c                 C   sn   | j || j  d|d i}z| jd |d< W n tk
r>   Y nX tf |Ž| _t | j¡sjt | j	d d¡‚i S )Nr   Úrequestr#   )
r&   ÚcontextÚKeyErrorr   Úuserr   ZUSER_AUTHENTICATION_RULEr   ZAuthenticationFailedZerror_messages)r   ÚattrsZauthenticate_kwargsr   r   r   Úvalidate'   s       þþzTokenObtainSerializer.validatec                 C   s   | j  |¡S )N)Útoken_classZfor_user)Úclsr*   r   r   r   Ú	get_token;   s    zTokenObtainSerializer.get_token)r   r   r    r   ZUSERNAME_FIELDr&   r-   Ú_Zdefault_error_messagesr   r,   Úclassmethodr/   r!   r   r   r   r   r"      s    ÿr"   c                       s    e Zd ZeZ‡ fdd„Z‡  ZS )ÚTokenObtainPairSerializerc                    sH   t ƒ  |¡}|  | j¡}t|ƒ|d< t|jƒ|d< tjrDtd | jƒ |S ©NÚrefreshÚaccess)	r   r,   r/   r*   ÚstrÚaccess_tokenr   ÚUPDATE_LAST_LOGINr   )r   r+   Údatar4   r   r   r   r,   C   s    z"TokenObtainPairSerializer.validate)r   r   r    r   r-   r,   r!   r   r   r   r   r2   @   s   r2   c                       s    e Zd ZeZ‡ fdd„Z‡  ZS )ÚTokenObtainSlidingSerializerc                    s:   t ƒ  |¡}|  | j¡}t|ƒ|d< tjr6td | jƒ |S ©NÚtoken)r   r,   r/   r*   r6   r   r8   r   )r   r+   r9   r<   r   r   r   r,   T   s    z%TokenObtainSlidingSerializer.validate)r   r   r    r   r-   r,   r!   r   r   r   r   r:   Q   s   r:   c                   @   s,   e Zd Ze ¡ Zejdd�ZeZdd„ Z	dS )ÚTokenRefreshSerializerT)Z	read_onlyc                 C   sr   |   |d ¡}dt|jƒi}tjrntjrJz| ¡  W n tk
rH   Y nX | ¡  | 	¡  | 
¡  t|ƒ|d< |S r3   )r-   r6   r7   r   ZROTATE_REFRESH_TOKENSÚBLACKLIST_AFTER_ROTATIONÚ	blacklistÚAttributeErrorZset_jtiÚset_expÚset_iat)r   r+   r4   r9   r   r   r   r,   f   s    zTokenRefreshSerializer.validateN)
r   r   r    r   r$   r4   r5   r   r-   r,   r   r   r   r   r=   a   s   r=   c                   @   s    e Zd Ze ¡ ZeZdd„ ZdS )ÚTokenRefreshSlidingSerializerc                 C   s6   |   |d ¡}| tj¡ | ¡  | ¡  dt|ƒiS r;   )r-   Z	check_expr   ZSLIDING_TOKEN_REFRESH_EXP_CLAIMrA   rB   r6   )r   r+   r<   r   r   r   r,   ‚   s
    z&TokenRefreshSlidingSerializer.validateN)	r   r   r    r   r$   r<   r   r-   r,   r   r   r   r   rC   ~   s   rC   c                   @   s   e Zd Ze ¡ Zdd„ ZdS )ÚTokenVerifySerializerc                 C   sF   t |d ƒ}tjrBdtjkrB| tj¡}tjj	|d� 
¡ rBtdƒ‚i S )Nr<   z(rest_framework_simplejwt.token_blacklist)Z
token__jtizToken is blacklisted)r   r   r>   r   ZINSTALLED_APPSÚgetZ	JTI_CLAIMr   ZobjectsÚfilterÚexistsr	   )r   r+   r<   Zjtir   r   r   r,   “   s    ÿþzTokenVerifySerializer.validateN)r   r   r    r   r$   r<   r,   r   r   r   r   rD   �   s   rD   c                   @   s    e Zd Ze ¡ ZeZdd„ ZdS )ÚTokenBlacklistSerializerc                 C   s4   |   |d ¡}z| ¡  W n tk
r.   Y nX i S )Nr4   )r-   r?   r@   )r   r+   r4   r   r   r   r,   ¥   s    z!TokenBlacklistSerializer.validateN)	r   r   r    r   r$   r4   r   r-   r,   r   r   r   r   rH   ¡   s   rH   N)!Zdjango.confr   Zdjango.contrib.authr   r   Zdjango.contrib.auth.modelsr   Zdjango.utils.translationr   r0   Zrest_frameworkr   r   Zrest_framework.exceptionsr	   r   Útokensr   r   r   r>   Ztoken_blacklist.modelsr   r$   r   Ú
Serializerr"   r2   r:   r=   rC   rD   rH   r   r   r   r   Ú<module>   s"   
'