o
    ǯh                     @   sJ  d dl 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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OptionalTypeVar)settings)authenticateget_user_model)AbstractBaseUserupdate_last_login)gettext_lazy)
exceptionsserializers)AuthenticationFailedValidationError   )	TokenUser)api_settings)RefreshTokenSlidingTokenTokenUntypedTokenAuthUser)BlacklistedTokenc                       s   e Zd Zd fddZ  ZS )PasswordFieldreturnNc                    s6   | di  d|d d< d|d< t j|i | d S )Nstylepassword
input_typeT
write_only)
setdefaultsuper__init__selfargskwargs	__class__ a/var/www/Befach/backend/venv/lib/python3.10/site-packages/rest_framework_simplejwt/serializers.pyr       s   zPasswordField.__init__r   N)__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 fddZdeeef deeef fd	d
Zedede	fddZ  ZS )TokenObtainSerializerNtoken_classno_active_accountz2No active account found with the given credentialsr   c                    s6   t  j|i | 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__attrsc                 C   sp   | j || j  d|d i}z	| jd |d< W n	 ty   Y nw tdi || _t| js6t| j	d di S )Nr   requestr0   r'   )
r4   contextKeyErrorr   userr   USER_AUTHENTICATION_RULEr   r   error_messages)r"   r5   authenticate_kwargsr'   r'   r(   validate,   s   zTokenObtainSerializer.validater9   c                 C   s   | j |S )N)r/   for_user)clsr9   r'   r'   r(   	get_token@   s   zTokenObtainSerializer.get_tokenr)   )r*   r+   r,   r   USERNAME_FIELDr4   r/   r   typer   __annotations___default_error_messagesr    dictstrr   r=   classmethodr   r@   r-   r'   r'   r%   r(   r.      s   
 "r.   c                       :   e Zd ZeZdeeef deeef f fddZ  Z	S )TokenObtainPairSerializerr5   r   c                    sH   t  |}| | j}t||d< t|j|d< tjr"td | j |S )Nrefreshaccess)	r   r=   r@   r9   rG   access_tokenr   UPDATE_LAST_LOGINr	   )r"   r5   datarK   r%   r'   r(   r=   H   s   z"TokenObtainPairSerializer.validate)
r*   r+   r,   r   r/   rF   rG   r   r=   r-   r'   r'   r%   r(   rJ   E       .rJ   c                       rI   )TokenObtainSlidingSerializerr5   r   c                    s:   t  |}| | j}t||d< tjrtd | j |S Ntoken)r   r=   r@   r9   rG   r   rN   r	   )r"   r5   rO   rS   r%   r'   r(   r=   Y   s   z%TokenObtainSlidingSerializer.validate)
r*   r+   r,   r   r/   rF   rG   r   r=   r-   r'   r'   r%   r(   rQ   V   rP   rQ   c                   @   sR   e Zd Ze ZejddZeZde	diZ
deeef deeef fddZd	S )
TokenRefreshSerializerT)	read_onlyr0   z,No active account found for the given token.r5   r   c                 C   s   |  |d }|jtjd }|r-t jjdi tj|i }r-t|s-t	| j
d ddt|ji}tjr`tjrJz|  W n	 tyI   Y nw |  |  |  |  t||d< |S )NrK   r0   rL   r'   )r/   payloadgetr   USER_ID_CLAIMr   objectsUSER_ID_FIELDr:   r   r;   rG   rM   ROTATE_REFRESH_TOKENSBLACKLIST_AFTER_ROTATION	blacklistAttributeErrorset_jtiset_expset_iatoutstand)r"   r5   rK   user_idr9   rO   r'   r'   r(   r=   o   s4   
zTokenRefreshSerializer.validateN)r*   r+   r,   r   r2   rK   rL   r   r/   rD   rE   rF   rG   r   r=   r'   r'   r'   r(   rT   f   s    &rT   c                   @   s:   e Zd Ze ZeZdee	e
f dee	e	f fddZdS )TokenRefreshSlidingSerializerr5   r   c                 C   s6   |  |d }|tj |  |  dt|iS rR   )r/   	check_expr   SLIDING_TOKEN_REFRESH_EXP_CLAIMr`   ra   rG   )r"   r5   rS   r'   r'   r(   r=      s
   z&TokenRefreshSlidingSerializer.validateN)r*   r+   r,   r   r2   rS   r   r/   rF   rG   r   r=   r'   r'   r'   r(   rd      s    &rd   c                   @   s:   e Zd ZejddZdeedf deeef fddZ	dS )TokenVerifySerializerTr1   r5   Nr   c                 C   sF   t |d }tjr!dtjv r!|tj}tjj	|d
 r!tdi S )NrS   z(rest_framework_simplejwt.token_blacklist)
token__jtizToken is blacklisted)r   r   r\   r   INSTALLED_APPSrW   	JTI_CLAIMr   rY   filterexistsr   )r"   r5   rS   jtir'   r'   r(   r=      s   
zTokenVerifySerializer.validate)
r*   r+   r,   r   r2   rS   rF   rG   r   r=   r'   r'   r'   r(   rg      s    &rg   c                   @   s>   e Zd ZejddZeZdee	e
f dee
e
f fddZdS )TokenBlacklistSerializerTr1   r5   r   c                 C   s2   |  |d }z|  W i S  ty   Y i S w )NrK   )r/   r]   r^   )r"   r5   rK   r'   r'   r(   r=      s   
z!TokenBlacklistSerializer.validateN)r*   r+   r,   r   r2   rK   r   r/   rF   rG   r   r=   r'   r'   r'   r(   rn      s    &rn   N)+typingr   r   r   django.confr   django.contrib.authr   r   django.contrib.auth.modelsr   r	   django.utils.translationr
   rD   rest_frameworkr   r   rest_framework.exceptionsr   r   modelsr   r   tokensr   r   r   r   r   r\   token_blacklist.modelsr   r2   r   
Serializerr.   rJ   rQ   rT   rd   rg   rn   r'   r'   r'   r(   <module>   s*    
'.