
    !h                     &   d dl mZ d dlmZ d dlmZmZ ddlm	Z	m
Z
mZ ddlmZ ej                  Z eej                  eef      sefZeD  ch c]  } | j%                  e       c} Z G d dej(                        Z G d	 d
e      ZeZd Zyc c} w )    )get_user_model)gettext_lazy)HTTP_HEADER_ENCODINGauthentication   )AuthenticationFailedInvalidToken
TokenError)api_settingsc                   N     e Zd ZdZdZdZ fdZd Zd Zd Z	d Z
d	 Zd
 Z xZS )JWTAuthenticationzy
    An authentication plugin that authenticates requests through a JSON web
    token provided in a request header.
    apizapplication/jsonc                 B    t        |   |i | t               | _        y N)super__init__r   
user_model)selfargskwargs	__class__s      g/var/www/html/Ryun_Seer/newvenv/lib/python3.12/site-packages/rest_framework_simplejwt/authentication.pyr   zJWTAuthentication.__init__   s    $)&)(*    c                     | j                  |      }|y | j                  |      }|y | j                  |      }| j                  |      |fS r   )
get_headerget_raw_tokenget_validated_tokenget_user)r   requestheader	raw_tokenvalidated_tokens        r   authenticatezJWTAuthentication.authenticate   sU    )>&&v.	229=}}_->>r   c                 H    dj                  t        d   | j                        S )Nz{} realm="{}"r   )formatAUTH_HEADER_TYPESwww_authenticate_realm)r   r   s     r   authenticate_headerz%JWTAuthentication.authenticate_header*   s&    %%a ''
 	
r   c                     |j                   j                  t        j                        }t	        |t
              r|j                  t              }|S )zc
        Extracts the header containing the JSON web token from the given
        request.
        )METAgetr   AUTH_HEADER_NAME
isinstancestrencoder   )r   r   r    s      r   r   zJWTAuthentication.get_header0   s<    
 !!,"?"?@fc"]]#78Fr   c                     |j                         }t        |      dk(  ry|d   t        vryt        |      dk7  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lenAUTH_HEADER_TYPE_BYTESr   _)r   r    partss      r   r   zJWTAuthentication.get_raw_token=   s\    
 u:?811u:?&PQ/ 
 Qxr   c                 
   g }t         j                  D ]  }	  ||      c S  t        t        d      |d      # t        $ r@}|j                  |j                  |j
                  |j                  d   d       Y d}~jd}~ww xY w)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__r<   r   r	   r8   )r   r!   r?   	AuthTokenes        r   r   z%JWTAuthentication.get_validated_tokenT   s    
 %88I	 ++ 9 FG$
 	
  '0'9'9&/&:&:#$66!9 s   9	B6A==Bc                    	 |t         j                     }	  | j
                  j                  j                  di t         j                  |i}|j                  st        t	        d      d      |S # t        $ r t        t	        d            w xY w# | j
                  j                  $ r t        t	        d      d      w xY w)zU
        Attempts to find and return a user using the given validated token.
        3Token contained no recognizable user identificationzUser not founduser_not_foundr3   zUser is inactiveuser_inactive )r   USER_ID_CLAIMKeyErrorr	   r8   r   objectsr+   USER_ID_FIELDDoesNotExistr   	is_active)r   r"   user_idusers       r   r   zJWTAuthentication.get_userm   s    	Y%l&@&@AG	S.4??**..W,2L2Lg1VWD ~~&q);'<?SS  	Yq!VWXX	Y
 ++ 	S&q)9':AQRR	Ss   A0 6B 0B0C)rB   
__module____qualname____doc__r'   
media_typer   r#   r(   r   r   r   r   __classcell__)r   s   @r   r   r      s8    
 ##J+?
.
2r   r   c                       e Zd ZdZd Zy)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.
    c                 x    t         j                  |vrt        t        d            t        j                  |      S )zg
        Returns a stateless user object which is backed by the given validated
        token.
        rF   )r   rJ   r	   r8   TOKEN_USER_CLASS)r   r"   s     r   r   z'JWTStatelessUserAuthentication.get_user   s6    
 %%_< q!VWXX,,_==r   N)rB   rR   rS   rT   r   rI   r   r   rX   rX      s    

>r   rX   c                 &    | d uxr | j                   S r   )rO   )rQ   s    r    default_user_authentication_ruler\      s     t..r   N)django.contrib.authr   django.utils.translationr   r8   rest_frameworkr   r   
exceptionsr   r	   r
   settingsr   r&   r-   listtupler/   r7   BaseAuthenticationr   rX   JWTTokenUserAuthenticationr\   )hs   0r   <module>rg      s    . 6 ? F F " 22 ,004-@*,BSTBSQ!((#78BST n99 nb>%6 >& < /U Us   B