
    nbi5                       U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZ ej        rdd
lmZ dZded<   dZded<   d%dZ G d d          Z G d d          Z G d de          Z G d de          Z G d de          Ze G d d                       Z  G d! d"e          Z! G d# d$e!e          Z"dS )&z]
requests.auth
~~~~~~~~~~~~~

This module contains the authentication handlers for Requests.
    )annotationsN)	b64encode)	dataclassfield)urlparse   )extract_cookies_to_jar)parse_dict_header)PreparedRequestz!application/x-www-form-urlencodedstrCONTENT_TYPE_FORM_URLENCODEDzmultipart/form-dataCONTENT_TYPE_MULTI_PARTusernamestr | bytespasswordreturnc                D   t          | t                    r|                     d          } t          |t                    r|                    d          }dt          d                    | |f                                                                                    z   }|S )zReturns a Basic Auth string.utf-8zBasic    :)
isinstancer   encoder   joinstripdecode)r   r   authstrs      ]/var/www/html/mdtn/previsions/meteo_cartes/venv/lib/python3.11/site-packages/niquests/auth.py_basic_auth_strr      s     (C   ,??7++(C   ,??7++499h-A#B#BCCIIKKRRTTTGN    c                      e Zd ZdZddZdS )AsyncAuthBasezABase class that all asynchronous auth implementations derive fromrr   r   c                $   K   t          d          NzAuth hooks must be callable.NotImplementedErrorselfr!   s     r   __call__zAsyncAuthBase.__call__/   s      !"@AAAr   Nr!   r   r   r   __name__
__module____qualname____doc__r(    r   r   r    r    ,   s4        KKB B B B B Br   r    c                      e Zd ZdZddZdS )AuthBasez@Base class that all synchronous auth implementations derive fromr!   r   r   c                     t          d          r#   r$   r&   s     r   r(   zAuthBase.__call__6   s    !"@AAAr   Nr)   r*   r/   r   r   r1   r1   3   s4        JJB B B B B Br   r1   c                  0    e Zd ZdZddZddZddZd	 Zd
S )BearerTokenAuthz.Simple token injection in Authorization headertokenr   c                    || _         d S N)r5   )r'   r5   s     r   __init__zBearerTokenAuth.__init__=   s    


r   r   boolc                6    | j         t          |dd           k    S )Nr5   )r5   getattrr'   others     r   __eq__zBearerTokenAuth.__eq__@   s    zWUGT::::r   c                    | |k     S r7   r/   r<   s     r   __ne__zBearerTokenAuth.__ne__C       5=  r   c                    | j                             dd          }t          |          dk    rd| j          |j        d<   n| j         |j        d<   |S )N r   )maxsplitzBearer Authorization)r5   splitlenheaders)r'   r!   detect_token_types      r   r(   zBearerTokenAuth.__call__F   s]    '+z'7'7a'7'H'H !!Q&&)?4:)?)?AIo&&)-AIo&r   N)r5   r   r   r9   r+   r,   r-   r.   r8   r>   r@   r(   r/   r   r   r4   r4   :   se        88   ; ; ; ;! ! ! !    r   r4   c                  0    e Zd ZdZddZddZdd	Zd
 ZdS )HTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.r   r   r   c                "    || _         || _        d S r7   )r   r   r'   r   r   s      r   r8   zHTTPBasicAuth.__init__T   s      r   r   r9   c           	         t          | j        t          |dd           k    | j        t          |dd           k    g          S Nr   r   allr   r;   r   r<   s     r   r>   zHTTPBasicAuth.__eq__X   E    
D!A!AA
D!A!AA
 
 	
r   c                    | |k     S r7   r/   r<   s     r   r@   zHTTPBasicAuth.__ne__`   rA   r   c                J    t          | j        | j                  |j        d<   |S )NrE   r   r   r   rH   r&   s     r   r(   zHTTPBasicAuth.__call__c   s!    %4T]DM%R%R	/"r   N)r   r   r   r   rJ   rK   r/   r   r   rM   rM   Q   se        II! ! ! !
 
 
 
! ! ! !    r   rM   c                      e Zd ZdZd ZdS )HTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.c                J    t          | j        | j                  |j        d<   |S )NzProxy-AuthorizationrW   r&   s     r   r(   zHTTPProxyAuth.__call__k   s"    +:4=$-+X+X	'(r   Nr*   r/   r   r   rY   rY   h   s)        GG    r   rY   c                  |    e Zd ZU dZdZded<   dZded<   dZd	ed
<    ee	          Z
ded<   dZded<   dZded<   dS )DigestAuthStatez/Container for digest auth state per task/threadFr9   init r   
last_noncer   intnonce_count)default_factoryztyping.Mapping[str, str | None]chalNz
int | Noneposnum_401_calls)r+   r,   r-   r.   r]   __annotations__r_   ra   r   dictrc   rd   re   r/   r   r   r\   r\   p   s         99DJK,1E$,G,G,GDGGGGC $M$$$$$$r   r\   c                  T    e Zd ZdZddZddZddZddZd Zd Z	d Z
ddZddZdS )HTTPDigestAuthz@Attaches HTTP Digest Authentication to the given Request object.r   r   r   c                T    || _         || _        t          j        d          | _        d S )Ndigest_auth_state)r   r   contextvars
ContextVar_thread_localrO   s      r   r8   zHTTPDigestAuth.__init__   s*      FQF\]pFqFqr   r   Nonec                    | j                             d           }||j        s*| j                             t	          d                     d S d S )NT)r]   )rn   getr]   setr\   )r'   states     r   init_per_thread_statez$HTTPDigestAuth.init_per_thread_state   sR    "&&t,,=
=""?#=#=#=>>>>> =r   methodurl
str | Nonec                   | j                             d           }|J |j        d         }|j        d         }|j                            d          }|j                            d          }|j                            d          }d |d}	n|                                }	|	dk    s|	dk    rd-d}
|
n:|	dk    rd-d}|n-|	dk    rd-d}|n |	dk    rd-d}|nt	          d|	 d          fd}d S d }t          |          }|j        pd}|j        r|d|j         z  }| j         d| d| j	         }| d| } |          } |          }||j
        k    r|xj        dz  c_        nd|_        |j        d}t          |j                                      d          }|J ||                    d          z  }|t          j                                        d          z  }|t!          j        d          z  }t%          j        |                                          d d         }|	dk    r | d| d|           }|s ||| d|           }n9|dk    sd|                    d          v r| d| d| d | } |||          }nd S ||_
        d!| j         d"| d#| d$| d%| d&}|r	|d'| d&z  }|r	|d(| d&z  }|r	|d)| d&z  }|r|d*| d+| d&z  }d,| S ).Nrealmnonceqop	algorithmopaqueMD5zMD5-SESSxr   r   r   c                    t          | t                    r|                     d          } t          j        |                                           S Nr   )r   r   r   hashlibmd5	hexdigestr   s    r   md5_utf8z4HTTPDigestAuth.build_digest_header.<locals>.md5_utf8   s?    a%% *))A{1~~//111r   SHAc                    t          | t                    r|                     d          } t          j        |                                           S r   )r   r   r   r   sha1r   r   s    r   sha_utf8z4HTTPDigestAuth.build_digest_header.<locals>.sha_utf8   s?    a%% *))A|A00222r   zSHA-256c                    t          | t                    r|                     d          } t          j        |                                           S r   )r   r   r   r   sha256r   r   s    r   sha256_utf8z7HTTPDigestAuth.build_digest_header.<locals>.sha256_utf8   A    a%% *))A~a((22444r   zSHA-512c                    t          | t                    r|                     d          } t          j        |                                           S r   )r   r   r   r   sha512r   r   s    r   sha512_utf8z7HTTPDigestAuth.build_digest_header.<locals>.sha512_utf8   r   r   'z$' hashing algorithm is not supportedc                $     |  d|           S )N:r/   )sd	hash_utf8s     r   <lambda>z4HTTPDigestAuth.build_digest_header.<locals>.<lambda>   s    ))qJJ1JJ// r   /?r   r   08xr         auth,z:auth:z
username="z
", realm="z
", nonce="z", uri="z", response=""z
, opaque="z, algorithm="z
, digest="z, qop="auth", nc=z
, cnonce="zDigest )r   r   r   r   )rn   rq   rc   upper
ValueErrorr   pathqueryr   r   r_   ra   r   r   timectimeosurandomr   r   r   rF   )r'   ru   rv   rs   ry   rz   r{   r|   r}   
_algorithmr   r   r   r   KDentdigp_parsedr   A1A2HA1HA2ncvaluer   cnoncerespdignoncebitbaser   s                               @r   build_digest_headerz"HTTPDigestAuth.build_digest_header   sK   "&&t,,   
7#
7#jnnU##JNN;//	))@D	JJ"**J*
":":2 2 2 2
 !II5  3 3 3 3
 !II9$$5 5 5 5
 $II9$$5 5 5 5
 $IIQQQQRRR////4 C==}#> 	)((((D777777immimmE$$$" !E&,,!""))'22   	U\\'"""	TZ\\  )))	RZ]]a**,,SbS1##)s55U55V5566C 	b....//GGF]]f		#66??'??F??#??Hbh''GG 4  sDMrrUrrerrUYrrhorrr 	+*****D 	10I0000D 	+*****D 	EDDD6DDDDDr   c                b    | j                             d          }|J |j        r	d|_        dS dS )z)Reset num_401_calls counter on redirects.Nr   )rn   rq   is_redirectre   )r'   r!   kwargsrs   s       r   handle_redirectzHTTPDigestAuth.handle_redirect   sF    "&&t,,   = 	$"#E	$ 	$r   c                  K   | j                             d          }|J d|j        cxk    rdk     sn d|_        |S |j        $|j        j                            |j                   |j                            dd          }d|	                                v rD|j        dk     r8|xj        dz  c_        t          j        d	t          j        
          }t          |                    d|d                    |_        |j         d{V  |                                 d{V  |j                                        }t'          |j        |j        |j                   |                    |j                   |                     |j        |j                  |j        d<    |j        j        |fi | d{V }|j                            |           ||_        |S d|_        |S )z
        Takes the given response and tries digest-auth, if needed (async version).

        :rtype: requests.Response
        N    r   www-authenticater^   digest   digest flagscountrE   rn   rq   status_codere   rd   requestbodyseekrH   lowerrecompile
IGNORECASEr
   subrc   contentclosecopyr	   _cookiesrawprepare_cookiesr   ru   rv   
connectionsendhistoryappendr'   r!   r   rs   s_authpatprep_rs           r   async_handle_401zHTTPDigestAuth.async_handle_401  s      "&&t,,    am))))c))))"#EH9  IN	***1266v||~~%%%*=*A*A1$*Zr}===C*3772vQ7+G+GHHEJ )OOOOOOO''))OOOOOOO9>>##D"4=!)QUCCC  ///,0,D,DT[RVRZ,[,[DL)(q|(8888888888BJa   BJIr   c                   | j                             d          }|J d|j        cxk    rdk     sn d|_        |S |j        $|j        j                            |j                   |j                            dd          }d|	                                v r2|j        dk     r&|xj        dz  c_        t          j        d	t          j        
          }t          |                    d|d                    |_        |j         |                                 |j                                        }t'          |j        |j        |j                   |                    |j                   |                     |j        |j                  |j        d<    |j        j        |fi |}|j                            |           ||_        |S d|_        |S )zo
        Takes the given response and tries digest-auth, if needed.

        :rtype: requests.Response
        Nr   r   r   r   r^   r   r   r   r   r   rE   r   r   s           r   
handle_401zHTTPDigestAuth.handle_4013  s    "&&t,,    am))))c))))"#EH9  IN	***1266v||~~%%%*=*A*A1$*Zr}===C*3772vQ7+G+GHHEJ IIGGIII9>>##D"4=!)QUCCC  ///,0,D,DT[RVRZ,[,[DL)""422622BJa   BJIr   c                   |                                   | j                            d           }|J |j        r(|                     |j        |j                  |j        d<   	 |j        	                                |_
        n# t          $ r
 d |_
        Y nw xY w|                    d| j                   |                    d| j                   d|_        |S NrE   responser   )rt   rn   rq   r_   r   ru   rv   rH   r   tellrd   AttributeErrorregister_hookr   r   re   r'   r!   rs   s      r   r(   zHTTPDigestAuth.__call__`  s    ""$$$"&&t,,    	S)-)A)A!(AE)R)RAIo&	EII 	 	 	
 EIII	 	

DO444	
D$8999s   #B BBr9   c           	         t          | j        t          |dd           k    | j        t          |dd           k    g          S rQ   rR   r<   s     r   r>   zHTTPDigestAuth.__eq__w  rT   r   c                    | |k     S r7   r/   r<   s     r   r@   zHTTPDigestAuth.__ne__  rA   r   N)r   r   r   r   )r   ro   )ru   r   rv   r   r   rw   rJ   )r+   r,   r-   r.   r8   rt   r   r   r   r   r(   r>   r@   r/   r   r   ri   ri   |   s        JJr r r r? ? ? ?o  o  o  o b$ $ $ $+ + +Z+ + +Z  .
 
 
 
! ! ! ! ! !r   ri   c                      e Zd ZdZd ZdS )AsyncHTTPDigestAutha  Async version of HTTPDigestAuth for use with AsyncSession.

    Attaches HTTP Digest Authentication to the given Request object and handles
    401 responses asynchronously.

    Example usage::

        >>> import niquests
        >>> auth = niquests.auth.AsyncHTTPDigestAuth('user', 'pass')
        >>> async with niquests.AsyncSession() as session:
        ...     r = await session.get('https://httpbin.org/digest-auth/auth/user/pass', auth=auth)
        ...     print(r.status_code)
        200
    c                  K   |                                   | j                            d           }|J |j        r(|                     |j        |j                  |j        d<   	 |j        	                                |_
        n# t          $ r
 d |_
        Y nw xY w|                    d| j                   |                    d| j                   d|_        |S r   )rt   rn   rq   r_   r   ru   rv   rH   r   r   rd   r   r   r   r   re   r   s      r   r(   zAsyncHTTPDigestAuth.__call__  s      ""$$$"&&t,,    	S)-)A)A!(AE)R)RAIo&	EII 	 	 	
 EIII	 	

D$9:::	
D$8999s   %B BBNr*   r/   r   r   r   r     s-             r   r   )r   r   r   r   r   r   )#r.   
__future__r   rl   r   r   r   r   typingbase64r   dataclassesr   r   urllib.parser   cookiesr	   utilsr
   TYPE_CHECKINGmodelsr   r   rf   r   r   r    r1   r4   rM   rY   r\   ri   r   r/   r   r   <module>r      s     # " " " " "      				 				         ( ( ( ( ( ( ( ( ! ! ! ! ! ! + + + + + + $ $ $ $ $ $	 (''''''$G  G G G G4  4 4 4 4   B B B B B B B BB B B B B B B B    h   .    H   .    M    % % % % % % % %D! D! D! D! D!X D! D! D!N% % % % %.- % % % % %r   