a
    xd                     @   s   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sdefZedd eD ZG d	d
 d
ejZG dd deZdd ZdS )    )get_user_model)gettext_lazy)HTTP_HEADER_ENCODINGauthentication   )AuthenticationFailedInvalidToken
TokenError)api_settingsc                 c   s   | ]}| tV  qd S N)encoder   ).0h r   _/var/www/html/Ranjet/env/lib/python3.9/site-packages/rest_framework_simplejwt/authentication.py	<genexpr>   s   r   c                       sX   e Zd ZdZdZdZ fddZdd Zdd	 Zd
d Z	dd Z
dd Zdd Z  ZS )JWTAuthenticationzy
    An authentication plugin that authenticates requests through a JSON web
    token provided in a request header.
    apizapplication/jsonc                    s   t  j|i | t | _d S r   )super__init__r   
user_model)selfargskwargs	__class__r   r   r      s    zJWTAuthentication.__init__c                 C   sD   |  |}|d u rd S | |}|d u r,d S | |}| ||fS r   )
get_headerget_raw_tokenget_validated_tokenget_user)r   requestheader	raw_tokenvalidated_tokenr   r   r   authenticate   s    


zJWTAuthentication.authenticatec                 C   s   d td | jS )Nz{0} realm="{1}"r   )formatAUTH_HEADER_TYPESwww_authenticate_realm)r   r    r   r   r   authenticate_header,   s    z%JWTAuthentication.authenticate_headerc                 C   s&   |j tj}t|tr"|t}|S )zc
        Extracts the header containing the JSON web token from the given
        request.
        )ZMETAgetr
   ZAUTH_HEADER_NAME
isinstancestrr   r   )r   r    r!   r   r   r   r   2   s    

zJWTAuthentication.get_headerc                 C   sL   |  }t|dkrdS |d tvr(dS t|dkrDttd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 valuesZbad_authorization_headercoder   )splitlenAUTH_HEADER_TYPE_BYTESr   _)r   r!   partsr   r   r   r   ?   s    zJWTAuthentication.get_raw_tokenc                 C   sv   g }t jD ]T}z||W   S  ty\ } z(||j|j|jd d W Y d}~q
d}~0 0 q
ttd|ddS )zk
        Validates an encoded JSON web token and returns a validated token
        wrapper object.
        r   )Ztoken_class
token_typemessageNz(Given token not valid for any token type)Zdetailmessages)	r
   ZAUTH_TOKEN_CLASSESr	   append__name__r4   r   r   r2   )r   r"   r6   Z	AuthTokener   r   r   r   V   s    
 z%JWTAuthentication.get_validated_tokenc                 C   s   z|t j }W n ty,   ttdY n0 z| jjjf i t j|i}W n& | jj	yr   t
tdddY n0 |jst
tddd|S )zU
        Attempts to find and return a user using the given validated token.
        3Token contained no recognizable user identificationzUser not foundZuser_not_foundr-   zUser is inactiveZuser_inactive)r
   USER_ID_CLAIMKeyErrorr   r2   r   Zobjectsr)   ZUSER_ID_FIELDZDoesNotExistr   	is_active)r   r#   Zuser_iduserr   r   r   r   i   s    zJWTAuthentication.get_user)r8   
__module____qualname____doc__r'   
media_typer   r$   r(   r   r   r   r   __classcell__r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )JWTTokenUserAuthenticationc                 C   s    t j|vrttdt |S )zg
        Returns a stateless user object which is backed by the given validated
        token.
        r:   )r
   r;   r   r2   ZTOKEN_USER_CLASS)r   r#   r   r   r   r   ~   s    
z#JWTTokenUserAuthentication.get_userN)r8   r?   r@   r   r   r   r   r   rD   }   s   rD   c                 C   s   | d uo| j S r   )r=   )r>   r   r   r    default_user_authentication_rule   s    rE   N)Zdjango.contrib.authr   Zdjango.utils.translationr   r2   Zrest_frameworkr   r   
exceptionsr   r   r	   settingsr
   r&   r*   listtuplesetr1   ZBaseAuthenticationr   rD   rE   r   r   r   r   <module>   s   j