
     h                     6   d dl 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 d d	lmZ d d
lmZmZ  e            Zej        Zej        Zej        Zej        Z G d de          Z G d de          Z G d de          Z G d de          Z dS )    N)timegm)datetime	timedelta)authenticateget_user_model)ugettext)serializers   )
Serializer)api_settings)get_username_fieldPasswordFieldc                   >     e Zd ZdZ fdZed             Zd Z xZS )JSONWebTokenSerializerz
    Serializer class used to validate a username and password.

    'username' is identified by the custom UserModel.USERNAME_FIELD.

    Returns a JSON Web Token that can be used to authenticate later calls.
    c                      t          t          |           j        |i | t          j                    | j        | j        <   t          d          | j        d<   dS )zD
        Dynamically add the USERNAME_FIELD to self.fields.
        T)
write_onlypasswordN)superr   __init__r	   	CharFieldfieldsusername_fieldr   )selfargskwargs	__class__s      Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/rest_framework_jwt/serializers.pyr   zJSONWebTokenSerializer.__init__   s]     	5$d++4dEfEEE+6+@+B+BD'("/4"@"@"@J    c                     t                      S )N)r   )r   s    r   r   z%JSONWebTokenSerializer.username_field'   s    !###r   c                 $   | j         |                    | j                   d|                    d          i}t          |                                          r|t	          di |}|rK|j        s#t          d          }t          j        |          t          |          }t          |          |dS t          d          }t          j        |          t          d          }|                    | j                   }t          j        |          )Nr   User account is disabled.tokenuserz+Unable to log in with provided credentials.z/Must include "{username_field}" and "password".)r    )r   getallvaluesr   	is_active_r	   ValidationErrorjwt_payload_handlerjwt_encode_handlerformat)r   attrscredentialsr$   msgpayloads         r   validatezJSONWebTokenSerializer.validate+   s   4+>!?!?		*--

 {!!##$$ 	3..+..D 7~ ;788C%5c:::-d33 088   
 EFF!1#666EFFC**D,?*@@C-c222r   )	__name__
__module____qualname____doc__r   propertyr   r3   __classcell__)r   s   @r   r   r      sq         A A A A A $ $ X$3 3 3 3 3 3 3r   r   c                   B    e Zd ZdZ ej                    Zd Zd Zd Z	dS )VerificationBaseSerializerzE
    Abstract serializer used for verifying and refreshing JWTs.
    c                 $    d}t          |          )Nz Please define a validate method.)NotImplementedError)r   r/   r1   s      r   r3   z#VerificationBaseSerializer.validateN   s    0!#&&&r   c                     	 t          |          }ng# t          j        $ r$ t          d          }t	          j        |          t          j        $ r$ t          d          }t	          j        |          w xY w|S )NzSignature has expired.zError decoding signature.)jwt_decode_handlerjwtExpiredSignaturer*   r	   r+   DecodeError)r   r#   r2   r1   s       r   _check_payloadz)VerificationBaseSerializer._check_payloadR   s    	3(//GG# 	3 	3 	3,--C-c222 	3 	3 	3/00C-c222	3 s
    A$A6c                 p   t          |          }|s#t          d          }t          j        |          	 t          j                            |          }n6# t          j        $ r$ t          d          }t          j        |          w xY w|j        s#t          d          }t          j        |          |S )NzInvalid payload.zUser doesn't exist.r!   )	jwt_get_username_from_payloadr*   r	   r+   Userobjectsget_by_natural_keyDoesNotExistr)   )r   r2   usernamer1   r$   s        r   _check_userz&VerificationBaseSerializer._check_user`   s    099 	3&''C-c222	3<228<<DD  	3 	3 	3)**C-c222	3 ~ 	3/00C-c222s   A 3B	N)
r4   r5   r6   r7   r	   r   r#   r3   rC   rK   r%   r   r   r;   r;   H   s]          "K!##E' ' '      r   r;   c                       e Zd ZdZd ZdS )VerifyJSONWebTokenSerializerz0
    Check the veracity of an access token.
    c                 t    |d         }|                      |          }|                     |          }||dS )Nr#   r#   r2   r"   )rC   rK   )r   r/   r#   r2   r$   s        r   r3   z%VerifyJSONWebTokenSerializer.validatez   sN    g%%E%2200 
 
 	
r   Nr4   r5   r6   r7   r3   r%   r   r   rM   rM   u   s-         	
 	
 	
 	
 	
r   rM   c                       e Zd ZdZd ZdS )RefreshJSONWebTokenSerializerz"
    Refresh an access token.
    c                 r   |d         }|                      |          }|                     |          }|                    d          }|rt          j        }t          |t                    r|j        dz  dz  |j        z   }|t          |          z   }t          t          j                                                              }||k    r#t          d          }	t          j        |	          n#t          d          }	t          j        |	          t#          |          }
||
d<   t%          |
          |d	S )
Nr#   rO   rP   orig_iat   i  zRefresh has expired.zorig_iat field is required.r"   )rC   rK   r&   r   JWT_REFRESH_EXPIRATION_DELTA
isinstancer   dayssecondsintr   r   utcnowutctimetupler*   r	   r+   r,   r-   )r   r/   r#   r2   r$   rU   refresh_limitexpiration_timestampnow_timestampr1   new_payloads              r   r3   z&RefreshJSONWebTokenSerializer.validate   sD   g%%E%2200;;z** 	3(EM-33 8!.!3b!84!?!.!6"7 $,c-.@.@#@ "8?#4#4#A#A#C#CDDM333.//!1#666 4 122C-c222)$//"*J (44
 
 	
r   NrQ   r%   r   r   rS   rS      s-          
  
  
  
  
r   rS   )!r@   calendarr   r   r   django.contrib.authr   r   django.utils.translationr   r*   rest_frameworkr	   compatr   rest_framework_jwt.settingsr   rest_framework_jwt.compatr   r   rF   JWT_PAYLOAD_HANDLERr,   JWT_ENCODE_HANDLERr-   JWT_DECODE_HANDLERr?    JWT_PAYLOAD_GET_USERNAME_HANDLERrE   r   r;   rM   rS   r%   r   r   <module>rm      s   



       ( ( ( ( ( ( ( ( < < < < < < < < 2 2 2 2 2 2 & & & & & &       4 4 4 4 4 4 G G G G G G G G ~"6 !4 !4  , M /3 /3 /3 /3 /3Z /3 /3 /3d* * * * * * * *Z
 
 
 
 
#= 
 
 
"%
 %
 %
 %
 %
$> %
 %
 %
 %
 %
r   