o
    ¦ó·i³  ã                   @   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ÚpasswordZ
input_typeTÚ
write_only)Ú
setdefaultÚsuperÚ__init__©ÚselfÚargsÚkwargs©Ú	__class__© újC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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   Úrequestr/   r&   )
r3   ÚcontextÚKeyErrorr   Úuserr   ÚUSER_AUTHENTICATION_RULEr   r   Úerror_messages)r!   r4   Zauthenticate_kwargsr&   r&   r'   Úvalidate,   s   þÿþzTokenObtainSerializer.validater8   c                 C   s   | j  |¡S )N)r.   Zfor_user)Úclsr8   r&   r&   r'   Ú	get_token@   s   zTokenObtainSerializer.get_tokenr(   )r)   r*   r+   r   ZUSERNAME_FIELDr3   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 )ÚTokenObtainPairSerializerr4   r   c                    sH   t ƒ  |¡}|  | j¡}t|ƒ|d< t|jƒ|d< tjr"td | jƒ |S )NÚrefreshÚaccess)	r   r;   r=   r8   rC   Úaccess_tokenr   ÚUPDATE_LAST_LOGINr	   )r!   r4   ÚdatarG   r$   r&   r'   r;   H   s   z"TokenObtainPairSerializer.validate)
r)   r*   r+   r   r.   rB   rC   r   r;   r,   r&   r&   r$   r'   rF   E   ó    .rF   c                       rE   )ÚTokenObtainSlidingSerializerr4   r   c                    s:   t ƒ  |¡}|  | j¡}t|ƒ|d< tjrtd | jƒ |S ©NÚtoken)r   r;   r=   r8   rC   r   rJ   r	   )r!   r4   rK   rO   r$   r&   r'   r;   Y   s   z%TokenObtainSlidingSerializer.validate)
r)   r*   r+   r   r.   rB   rC   r   r;   r,   r&   r&   r$   r'   rM   V   rL   rM   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)Z	read_onlyr/   z,No active account found for the given token.r4   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 )NrG   r/   rH   r&   )r.   ÚpayloadÚgetr   ZUSER_ID_CLAIMr   ÚobjectsZUSER_ID_FIELDr9   r   r:   rC   rI   ZROTATE_REFRESH_TOKENSÚBLACKLIST_AFTER_ROTATIONÚ	blacklistÚAttributeErrorZset_jtiÚset_expÚset_iatZoutstand)r!   r4   rG   Zuser_idr8   rK   r&   r&   r'   r;   o   s4   ÿÿ
þýzTokenRefreshSerializer.validateN)r)   r*   r+   r   r1   rG   rH   r   r.   r@   rA   rB   rC   r   r;   r&   r&   r&   r'   rP   f   s    ÿ&rP   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 )ÚTokenRefreshSlidingSerializerr4   r   c                 C   s6   |   |d ¡}| tj¡ | ¡  | ¡  dt|ƒiS rN   )r.   Z	check_expr   ZSLIDING_TOKEN_REFRESH_EXP_CLAIMrW   rX   rC   )r!   r4   rO   r&   r&   r'   r;   ˜   s
   z&TokenRefreshSlidingSerializer.validateN)r)   r*   r+   r   r1   rO   r   r.   rB   rC   r   r;   r&   r&   r&   r'   rY   ”   s    &rY   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 )ÚTokenVerifySerializerTr0   r4   Nr   c                 C   sJ   t |d ƒ}tjr#dtjv r#| tj¡}tjj	|d� 
¡ r#ttdƒƒ‚i S )NrO   z(rest_framework_simplejwt.token_blacklist)Z
token__jtizToken is blacklisted)r   r   rT   r   ZINSTALLED_APPSrR   Z	JTI_CLAIMr   rS   ÚfilterÚexistsr   r@   )r!   r4   rO   Zjtir&   r&   r'   r;   ©   s   ÿþzTokenVerifySerializer.validate)
r)   r*   r+   r   r1   rO   rB   rC   r   r;   r&   r&   r&   r'   rZ   ¦   s    &rZ   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 )ÚTokenBlacklistSerializerTr0   r4   r   c                 C   s2   |   |d ¡}z| ¡  W i S  ty   Y i S w )NrG   )r.   rU   rV   )r!   r4   rG   r&   r&   r'   r;   »   s   
þþz!TokenBlacklistSerializer.validateN)r)   r*   r+   r   r1   rG   r   r.   rB   rC   r   r;   r&   r&   r&   r'   r]   ·   s    &r]   N)+Útypingr   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   r   Úmodelsr   r   Útokensr   r   r   r   r   rT   Ztoken_blacklist.modelsr   r1   r   Ú
Serializerr-   rF   rM   rP   rY   rZ   r]   r&   r&   r&   r'   Ú<module>   s*    
'.