o
    Ëý°jß'  ã                   @   sÌ   d 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mZ ddlmZ ddlmZ ddlmZ d	Zd
Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )z]
requests.auth
~~~~~~~~~~~~~

This module contains the authentication handlers for Requests.
é    N)Ú	b64encodeé   )ÚurlparseÚstrÚ
basestring)Úextract_cookies_to_jar)Úto_native_string)Úparse_dict_headerz!application/x-www-form-urlencodedzmultipart/form-datac                 C   sš   t | tƒstjd | ¡td� t| ƒ} t |tƒs(tjd t|ƒ¡td� t|ƒ}t | tƒr2|  d¡} t |tƒr<| d¡}dt	t
d | |f¡ƒ ¡ ƒ }|S )zReturns a Basic Auth string.z·Non-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.)Úcategoryz·Non-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({!r}) to a string or bytes object in the near future to avoid problems.Úlatin1zBasic ó   :)Ú
isinstancer   ÚwarningsÚwarnÚformatÚDeprecationWarningr   ÚtypeÚencoder   r   ÚjoinÚstrip)ÚusernameÚpasswordÚauthstr© r   úŒ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/requests/auth.pyÚ_basic_auth_str   s,   

û

û



ÿr   c                   @   ó   e Zd ZdZdd„ ZdS )ÚAuthBasez4Base class that all auth implementations derive fromc                 C   s   t dƒ‚)NzAuth hooks must be callable.)ÚNotImplementedError©ÚselfÚrr   r   r   Ú__call__K   s   zAuthBase.__call__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r   r   r   r   r   H   ó    r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚHTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.c                 C   s   || _ || _d S ©N)r   r   ©r    r   r   r   r   r   Ú__init__R   s   
zHTTPBasicAuth.__init__c                 C   ó(   t | jt|dd ƒk| jt|dd ƒkgƒS ©Nr   r   ©Úallr   Úgetattrr   ©r    Úotherr   r   r   Ú__eq__V   ó   þzHTTPBasicAuth.__eq__c                 C   ó
   | |k S r*   r   r2   r   r   r   Ú__ne__\   ó   
zHTTPBasicAuth.__ne__c                 C   ó   t | j| jƒ|jd< |S )NÚAuthorization©r   r   r   Úheadersr   r   r   r   r"   _   ó   zHTTPBasicAuth.__call__N)r$   r%   r&   r'   r,   r4   r7   r"   r   r   r   r   r)   O   s    r)   c                   @   r   )ÚHTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.c                 C   r9   )NzProxy-Authorizationr;   r   r   r   r   r"   g   r=   zHTTPProxyAuth.__call__Nr#   r   r   r   r   r>   d   r(   r>   c                   @   sP   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚHTTPDigestAuthz@Attaches HTTP Digest Authentication to the given Request object.c                 C   s   || _ || _t ¡ | _d S r*   )r   r   Ú	threadingÚlocalÚ_thread_localr+   r   r   r   r,   o   s   zHTTPDigestAuth.__init__c                 C   sD   t | jdƒs d| j_d| j_d| j_i | j_d | j_d | j_d S d S )NÚinitTÚ r   )ÚhasattrrB   rC   Ú
last_nonceÚnonce_countÚchalÚposÚnum_401_calls)r    r   r   r   Úinit_per_thread_stateu   s   úz$HTTPDigestAuth.init_per_thread_statec                    sŽ  | j jd }| j jd }| j j d¡}| j j d¡}| j j d¡}d‰ |du r*d}n| ¡ }|dks6|dkr=d	d
„ }	|	‰ n |dkrHdd„ }
|
‰ n|dkrSdd„ }|‰ n
|dkr]dd„ }|‰ ‡ fdd„}ˆ du ridS d}t|ƒ}|jpsd}|jr~|d|j 7 }d| j|| jf }d||f }ˆ |ƒ}ˆ |ƒ}|| j j	kr¤| j  j
d7  _
nd| j _
d| j j
 }t| j j
ƒ d¡}|| d¡7 }|t ¡  d¡7 }|t d¡7 }t |¡ ¡ dd… }|dkræˆ d|||f ƒ}|sò||d||f ƒ}n|dksþd| d ¡v �rd!|||d|f }|||ƒ}ndS || j _	d"| j||||f }|�r&|d#| 7 }|�r/|d$| 7 }|�r8|d%| 7 }|�rC|d&||f 7 }d'| S )(z
        :rtype: str
        ÚrealmÚnonceÚqopÚ	algorithmÚopaqueNÚMD5zMD5-SESSc                 S   ó"   t | tƒr
|  d¡} t | ¡ ¡ S ©Núutf-8)r   r   r   ÚhashlibÚmd5Ú	hexdigest©Úxr   r   r   Úmd5_utf8‘   ó   

z4HTTPDigestAuth.build_digest_header.<locals>.md5_utf8ÚSHAc                 S   rR   rS   )r   r   r   rU   Úsha1rW   rX   r   r   r   Úsha_utf8—   r[   z4HTTPDigestAuth.build_digest_header.<locals>.sha_utf8zSHA-256c                 S   rR   rS   )r   r   r   rU   Úsha256rW   rX   r   r   r   Úsha256_utf8�   r[   z7HTTPDigestAuth.build_digest_header.<locals>.sha256_utf8zSHA-512c                 S   rR   rS   )r   r   r   rU   Úsha512rW   rX   r   r   r   Úsha512_utf8£   r[   z7HTTPDigestAuth.build_digest_header.<locals>.sha512_utf8c                    s   ˆ d| |f ƒS )Nú%s:%sr   )ÚsÚd©Ú	hash_utf8r   r   Ú<lambda>©   s    z4HTTPDigestAuth.build_digest_header.<locals>.<lambda>ú/ú?z%s:%s:%src   r   z%08xrT   é   é   Úauthú,z%s:%s:%s:%s:%sz>username="%s", realm="%s", nonce="%s", uri="%s", response="%s"z, opaque="%s"z, algorithm="%s"z, digest="%s"z , qop="auth", nc=%s, cnonce="%s"z	Digest %s)rB   rH   ÚgetÚupperr   ÚpathÚqueryr   r   rF   rG   r   r   ÚtimeÚctimeÚosÚurandomrU   r]   rW   Úsplit)r    ÚmethodÚurlrL   rM   rN   rO   rP   Ú
_algorithmrZ   r^   r`   rb   ÚKDÚentdigÚp_parsedrq   ÚA1ÚA2ÚHA1ÚHA2Úncvaluerd   ÚcnonceÚrespdigÚnoncebitÚbaser   rf   r   Úbuild_digest_header   s‚   

ÿÿz"HTTPDigestAuth.build_digest_headerc                 K   s   |j r	d| j_dS dS )z)Reset num_401_calls counter on redirects.r   N)Úis_redirectrB   rJ   )r    r!   Úkwargsr   r   r   Úhandle_redirectå   s   ÿzHTTPDigestAuth.handle_redirectc                 K   s"  d|j   krdk sn d| j_|S | jjdur!|jj | jj¡ |j dd¡}d| 	¡ v r‹| jjdk r‹| j jd7  _t
jd	t
jd
�}t|jd|dd�ƒ| j_|j | ¡  |j ¡ }t|j|j|jƒ | |j¡ |  |j|j¡|jd< |jj|fi |¤Ž}|j |¡ ||_|S d| j_|S )zo
        Takes the given response and tries digest-auth, if needed.

        :rtype: requests.Response
        i�  iô  r   Nzwww-authenticaterD   Údigesté   zdigest )Úflags)Úcountr:   )Ústatus_coderB   rJ   rI   ÚrequestÚbodyÚseekr<   ro   ÚlowerÚreÚcompileÚ
IGNORECASEr	   ÚsubrH   ÚcontentÚcloseÚcopyr   Ú_cookiesÚrawÚprepare_cookiesr‡   rx   ry   Ú
connectionÚsendÚhistoryÚappend)r    r!   r‰   Ús_authÚpatÚprepÚ_rr   r   r   Ú
handle_401ê   s0   	

ÿzHTTPDigestAuth.handle_401c                 C   s|   |   ¡  | jjr|  |j|j¡|jd< z	|j ¡ | j_	W n t
y)   d | j_	Y nw | d| j¡ | d| j¡ d| j_|S )Nr:   Úresponser   )rK   rB   rF   r‡   rx   ry   r<   r‘   ÚtellrI   ÚAttributeErrorÚregister_hookr¦   rŠ   rJ   r   r   r   r   r"     s   ûzHTTPDigestAuth.__call__c                 C   r-   r.   r/   r2   r   r   r   r4   *  r5   zHTTPDigestAuth.__eq__c                 C   r6   r*   r   r2   r   r   r   r7   0  r8   zHTTPDigestAuth.__ne__N)r$   r%   r&   r'   r,   rK   r‡   rŠ   r¦   r"   r4   r7   r   r   r   r   r?   l   s    
f,r?   )r'   ru   r”   rs   rU   r@   r   Úbase64r   Úcompatr   r   r   Úcookiesr   Ú_internal_utilsr   Úutilsr	   ÚCONTENT_TYPE_FORM_URLENCODEDÚCONTENT_TYPE_MULTI_PARTr   Úobjectr   r)   r>   r?   r   r   r   r   Ú<module>   s&   ,