U
    ÌS‚gH  ã                   @   sN  d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ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 ddlmZmZmZmZ edeeƒ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 )é    )ÚAnyÚDictÚOptionalÚTypeÚTypeVar)Úsettings)ÚauthenticateÚget_user_model)ÚAbstractBaseUserÚupdate_last_login)Úgettext_lazy)Ú
exceptionsÚserializers)ÚValidationErroré   )Ú	TokenUser)Úapi_settings)ÚRefreshTokenÚSlidingTokenÚTokenÚUntypedTokenÚAuthUser)ÚBlacklistedTokenc                       s"   e Zd Zddœ‡ fdd„Z‡  ZS )ÚPasswordFieldN©Úreturnc                    s2   |  di ¡ d|d d< d|d< tƒ j||Ž d S )NÚstyleÚpasswordZ
input_typeTÚ
write_only)Ú
setdefaultÚsuperÚ__init__©ÚselfÚargsÚkwargs©Ú	__class__© úH/tmp/pip-unpacked-wheel-vmzatu39/rest_framework_simplejwt/serializers.pyr!      s    zPasswordField.__init__)Ú__name__Ú
__module__Ú__qualname__r!   Ú__classcell__r(   r(   r&   r)   r      s   r   c                       s€   e Zd ZU eƒ jZdZeee	  e
d< dedƒiZddœ‡ fdd„Zeeef eeef dœd	d
„Zeee	dœdd„ƒZ‡  ZS )ÚTokenObtainSerializerNÚtoken_classÚno_active_accountz2No active account found with the given credentialsr   c                    s2   t ƒ j||Ž tjdd�| j| j< tƒ | jd< d S )NT©r   r   )r    r!   r   Ú	CharFieldÚfieldsÚusername_fieldr   r"   r&   r(   r)   r!   &   s    zTokenObtainSerializer.__init__©Úattrsr   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   Úrequestr0   )
r4   ÚcontextÚKeyErrorr   Úuserr   ZUSER_AUTHENTICATION_RULEr   ZAuthenticationFailedZerror_messages)r#   r6   Zauthenticate_kwargsr(   r(   r)   Úvalidate,   s       þþzTokenObtainSerializer.validate)r:   r   c                 C   s   | j  |¡S )N)r/   Zfor_user)Úclsr:   r(   r(   r)   Ú	get_token@   s    zTokenObtainSerializer.get_token)r*   r+   r,   r	   ZUSERNAME_FIELDr4   r/   r   r   r   Ú__annotations__Ú_Zdefault_error_messagesr!   r   Ústrr   r;   Úclassmethodr   r=   r-   r(   r(   r&   r)   r.      s   
 ÿ r.   c                       s8   e Zd ZeZeeef eeef dœ‡ fdd„Z‡  Z	S )ÚTokenObtainPairSerializerr5   c                    sH   t ƒ  |¡}|  | j¡}t|ƒ|d< t|jƒ|d< tjrDtd | jƒ |S ©NÚrefreshÚaccess)	r    r;   r=   r:   r@   Úaccess_tokenr   ÚUPDATE_LAST_LOGINr   )r#   r6   ÚdatarD   r&   r(   r)   r;   H   s    z"TokenObtainPairSerializer.validate)
r*   r+   r,   r   r/   r   r@   r   r;   r-   r(   r(   r&   r)   rB   E   s   rB   c                       s8   e Zd ZeZeeef eeef dœ‡ fdd„Z‡  Z	S )ÚTokenObtainSlidingSerializerr5   c                    s:   t ƒ  |¡}|  | j¡}t|ƒ|d< tjr6td | jƒ |S ©NÚtoken)r    r;   r=   r:   r@   r   rG   r   )r#   r6   rH   rK   r&   r(   r)   r;   Y   s    z%TokenObtainSlidingSerializer.validate)
r*   r+   r,   r   r/   r   r@   r   r;   r-   r(   r(   r&   r)   rI   V   s   rI   c                   @   sD   e Zd Ze ¡ Zejdd�ZeZe	e
ef e	e
e
f dœdd„ZdS )ÚTokenRefreshSerializerT)Z	read_onlyr5   c                 C   sr   |   |d ¡}dt|jƒi}tjrntjrJz| ¡  W n tk
rH   Y nX | ¡  | 	¡  | 
¡  t|ƒ|d< |S rC   )r/   r@   rF   r   ZROTATE_REFRESH_TOKENSÚBLACKLIST_AFTER_ROTATIONÚ	blacklistÚAttributeErrorZset_jtiÚset_expÚset_iat)r#   r6   rD   rH   r(   r(   r)   r;   k   s    zTokenRefreshSerializer.validateN)r*   r+   r,   r   r2   rD   rE   r   r/   r   r@   r   r;   r(   r(   r(   r)   rL   f   s   rL   c                   @   s8   e Zd Ze ¡ ZeZee	e
f ee	e	f dœdd„ZdS )ÚTokenRefreshSlidingSerializerr5   c                 C   s6   |   |d ¡}| tj¡ | ¡  | ¡  dt|ƒiS rJ   )r/   Z	check_expr   ZSLIDING_TOKEN_REFRESH_EXP_CLAIMrP   rQ   r@   )r#   r6   rK   r(   r(   r)   r;   ‡   s
    z&TokenRefreshSlidingSerializer.validateN)r*   r+   r,   r   r2   rK   r   r/   r   r@   r   r;   r(   r(   r(   r)   rR   ƒ   s   rR   c                   @   s8   e Zd Zejdd�Zeedf eeef dœdd„Z	dS )ÚTokenVerifySerializerTr1   Nr5   c                 C   sF   t |d ƒ}tjrBdtjkrB| tj¡}tjj	|d� 
¡ rBtdƒ‚i S )NrK   z(rest_framework_simplejwt.token_blacklist)Z
token__jtizToken is blacklisted)r   r   rM   r   ZINSTALLED_APPSÚgetZ	JTI_CLAIMr   ZobjectsÚfilterÚexistsr   )r#   r6   rK   Zjtir(   r(   r)   r;   ˜   s    ÿþzTokenVerifySerializer.validate)
r*   r+   r,   r   r2   rK   r   r@   r   r;   r(   r(   r(   r)   rS   •   s   rS   c                   @   s<   e Zd Zejdd�ZeZee	e
f ee
e
f dœdd„ZdS )ÚTokenBlacklistSerializerTr1   r5   c                 C   s4   |   |d ¡}z| ¡  W n tk
r.   Y nX i S )NrD   )r/   rN   rO   )r#   r6   rD   r(   r(   r)   r;   ª   s    z!TokenBlacklistSerializer.validateN)r*   r+   r,   r   r2   rD   r   r/   r   r@   r   r;   r(   r(   r(   r)   rW   ¦   s   rW   N),Útypingr   r   r   r   r   Zdjango.confr   Zdjango.contrib.authr   r	   Zdjango.contrib.auth.modelsr
   r   Zdjango.utils.translationr   r?   Zrest_frameworkr   r   Zrest_framework.exceptionsr   Úmodelsr   r   Útokensr   r   r   r   r   rM   Ztoken_blacklist.modelsr   r2   r   Ú
Serializerr.   rB   rI   rL   rR   rS   rW   r(   r(   r(   r)   Ú<module>   s(   
'