
    !+hW                     |   U d dl mZmZ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 d dlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ej        Z eej        ee f          sefZd eD             Z!ee"         e#d<    edee          Z$ G d dej%                  Z& G d de&          Z'e'Z(de$de)fdZ*dS )    )OptionalSetTupleTypeVar)get_user_model)AbstractBaseUser)gettext_lazy)HTTP_HEADER_ENCODINGauthentication)Request   )AuthenticationFailedInvalidToken
TokenError)	TokenUser)api_settings)Token)get_md5_hash_passwordc                 B    h | ]}|                     t                    S  )encoder
   ).0hs     k/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/rest_framework_simplejwt/authentication.py	<setcomp>r      s2     & & &'(AHH!""& & &    AUTH_HEADER_TYPE_BYTESAuthUserc                        e Zd ZdZdZdZd fdZdedee	e
ef                  fdZdedefd	Zdedefd
Zdedee         fdZdedefdZdede
fdZ xZS )JWTAuthenticationzy
    An authentication plugin that authenticates requests through a JSON web
    token provided in a request header.
    apizapplication/jsonreturnNc                 `     t                      j        |i | t                      | _        d S N)super__init__r   
user_model)selfargskwargs	__class__s      r   r&   zJWTAuthentication.__init__$   s0    $)&)))(**r   requestc                     |                      |          }|d S |                     |          }|d S |                     |          }|                     |          |fS r$   )
get_headerget_raw_tokenget_validated_tokenget_user)r(   r,   header	raw_tokenvalidated_tokens        r   authenticatezJWTAuthentication.authenticate(   se    ))>4&&v..	4229==}}_-->>r   c                 N    d                     t          d         | j                  S )Nz{} realm="{}"r   )formatAUTH_HEADER_TYPESwww_authenticate_realm)r(   r,   s     r   authenticate_headerz%JWTAuthentication.authenticate_header5   s(    %%a '
 
 	
r   c                     |j                             t          j                  }t	          |t
                    r|                    t                    }|S )zc
        Extracts the header containing the JSON web token from the given
        request.
        )METAgetr   AUTH_HEADER_NAME
isinstancestrr   r
   )r(   r,   r2   s      r   r.   zJWTAuthentication.get_header;   sE    
 !!,"?@@fc"" 	9]]#788Fr   r2   c                     |                                 }t          |          dk    rdS |d         t          vrdS t          |          dk    rt          t	          d          d          |d         S )zm
        Extracts an unvalidated JSON web token from the given "Authorization"
        header value.
        r   N   z<Authorization header must contain two space-delimited valuesbad_authorization_headercoder   )splitlenr   r   _)r(   r2   partss      r   r/   zJWTAuthentication.get_raw_tokenH   sz    
 u::??481114u::??&PQQ/   
 Qxr   r3   c                    g }t           j        D ]T}	  ||          c S # t          $ r8}|                    |j        |j        |j        d         d           Y d}~Md}~ww xY wt          t          d          |d          )zk
        Validates an encoded JSON web token and returns a validated token
        wrapper object.
        r   )token_class
token_typemessageNz(Given token not valid for any token type)detailmessages)	r   AUTH_TOKEN_CLASSESr   append__name__rL   r)   r   rH   )r(   r3   rO   	AuthTokenes        r   r0   z%JWTAuthentication.get_validated_token_   s    
 %8 
	 
	I	 y+++++   '0'9&/&:#$6!9         FGG$ 
 
 	
s   

A!.AA!r4   c                 6   	 |t           j                 }n*# t          $ r t          t	          d                    w xY w	  | j        j        j        d	i t           j        |i}n1# | j        j	        $ r t          t	          d          d          w xY w|j        st          t	          d          d          t           j        rS|                    t           j                  t          |j                  k    rt          t	          d          d          |S )
zU
        Attempts to find and return a user using the given validated token.
        3Token contained no recognizable user identificationzUser not founduser_not_foundrD   zUser is inactiveuser_inactivez%The user's password has been changed.password_changedr   )r   USER_ID_CLAIMKeyErrorr   rH   r'   objectsr=   USER_ID_FIELDDoesNotExistr   	is_activeCHECK_REVOKE_TOKENREVOKE_TOKEN_CLAIMr   password)r(   r4   user_idusers       r   r1   zJWTAuthentication.get_userx   sN   	Y%l&@AGG 	Y 	Y 	Yq!VWWXXX	Y	S.4?*.WW,2Lg1VWWDD+ 	S 	S 	S&q)9':':AQRRRR	S ~ 	T&q);'<'<?SSSS* 	""/ &t}556 6 +=>>EW    s    '< #A$ $.B)r"   N)rR   
__module____qualname____doc__r9   
media_typer&   r   r   r   r   r   r5   r@   r:   bytesr.   r/   r0   r1   __classcell__)r+   s   @r   r    r       s2        
 ##J+ + + + + +?G ?x9O0P ? ? ? ?
7 
s 
 
 
 
' e    E huo    .
U 
u 
 
 
 
2 (        r   r    c                   "    e Zd ZdZdedefdZdS )JWTStatelessUserAuthenticationz
    An authentication plugin that authenticates requests through a JSON web
    token provided in a request header without performing a database lookup to obtain a user instance.
    r4   r"   c                 ~    t           j        |vrt          t          d                    t          j        |          S )zg
        Returns a stateless user object which is backed by the given validated
        token.
        rV   )r   rZ   r   rH   TOKEN_USER_CLASS)r(   r4   s     r   r1   z'JWTStatelessUserAuthentication.get_user   s<    
 %_<< q!VWWXXX,_===r   N)rR   re   rf   rg   r   r   r1   r   r   r   rl   rl      s@         

> 
>( 
> 
> 
> 
> 
> 
>r   rl   rd   r"   c                     | d uo| j         S r$   )r_   )rd   s    r    default_user_authentication_rulerp      s     t..r   N)+typingr   r   r   r   django.contrib.authr   django.contrib.auth.modelsr   django.utils.translationr	   rH   rest_frameworkr
   r   rest_framework.requestr   
exceptionsr   r   r   modelsr   settingsr   tokensr   utilsr   r8   r?   listtupler   ri   __annotations__r   BaseAuthenticationr    rl   JWTTokenUserAuthenticationboolrp   r   r   r   <module>r      s   0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . 7 7 7 7 7 7 6 6 6 6 6 6 ? ? ? ? ? ? ? ? * * * * * * F F F F F F F F F F       " " " " " "       ( ( ( ( ( ( 2 z,04-@@ -*,& &,=& & & E
    7:/;;v v v v v9 v v vr> > > > >%6 > > >& < /8 / / / / / / /r   