o
    Ø­jÉ/  ã                   @  s2  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mZ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 ergddlmZ ddlmZ ddlmZmZ dZ de!d< dZ"de!d< d"dd„Z#G dd„ dƒ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.
é    )ÚannotationsN)Ú	b64encode)ÚTYPE_CHECKINGÚAnyÚFinalÚcastÚoverloadé   )Úto_native_string)Ú
basestringÚstrÚurlparse)Úextract_cookies_to_jar)Úparse_dict_header)Ú	CookieJar)r   )ÚPreparedRequestÚResponsez!application/x-www-form-urlencodedr   ÚCONTENT_TYPE_FORM_URLENCODEDzmultipart/form-dataÚCONTENT_TYPE_MULTI_PARTÚusernameúbytes | strÚpasswordÚreturnr   c                 C  sž   t | tƒstjd| ›d�td� t| ƒ} t |tƒs*tjdt|ƒ›d�td� t|ƒ}t | tƒr4|  d¡} t |tƒr>| d¡}dtt	d 
| |f¡ƒ ¡ ƒ }|S )zReturns a Basic Auth string.zpNon-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (zC) to a string or bytes object in the near future to avoid problems.)ÚcategoryzpNon-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in (Úlatin1zBasic ó   :)Ú
isinstancer   ÚwarningsÚwarnÚDeprecationWarningr   ÚtypeÚencoder
   r   ÚjoinÚstrip)r   r   Úauthstr© r%   úJ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/requests/auth.pyÚ_basic_auth_str"   s0   

ÿû
ÿû



ÿr'   c                   @  ó   e Zd ZdZddd„ZdS )	ÚAuthBasez4Base class that all auth implementations derive fromÚrr   r   c                 C  s   t dƒ‚)NzAuth hooks must be callable.)ÚNotImplementedError©Úselfr*   r%   r%   r&   Ú__call__Q   s   zAuthBase.__call__N©r*   r   r   r   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r%   r%   r%   r&   r)   N   ó    r)   c                   @  sf   e Zd ZU dZded< ded< eddd	„ƒZeddd	„ƒZddd	„Zddd„Zddd„Zddd„Z	dS ) ÚHTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.r   r   r   r   r   ÚNonec                 C  ó   d S ©Nr%   ©r-   r   r   r%   r%   r&   Ú__init__[   ó   zHTTPBasicAuth.__init__Úbytesc                 C  r8   r9   r%   r:   r%   r%   r&   r;   ]   r<   c                 C  s   || _ || _d S r9   )r   r   r:   r%   r%   r&   r;   `   s   
ÚotherÚobjectÚboolc                 C  ó(   t | jt|dd ƒk| jt|dd ƒkgƒS ©Nr   r   ©Úallr   Úgetattrr   ©r-   r>   r%   r%   r&   Ú__eq__d   ó
   þÿzHTTPBasicAuth.__eq__r   c                 C  ó
   | |k S r9   r%   rF   r%   r%   r&   Ú__ne__l   ó   
zHTTPBasicAuth.__ne__r*   r   c                 C  ó   t | j| jƒ|jd< |S )NÚAuthorization©r'   r   r   Úheadersr,   r%   r%   r&   r.   o   ó   zHTTPBasicAuth.__call__N©r   r   r   r   r   r7   ©r   r=   r   r=   r   r7   ©r   r   r   r   r   r7   ©r>   r?   r   r@   ©r>   r   r   r@   r/   )
r1   r2   r3   r4   Ú__annotations__r   r;   rG   rJ   r.   r%   r%   r%   r&   r6   U   s   
 


r6   c                   @  r(   )	ÚHTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.r*   r   r   c                 C  rL   )NzProxy-AuthorizationrN   r,   r%   r%   r&   r.   w   rP   zHTTPProxyAuth.__call__Nr/   r0   r%   r%   r%   r&   rW   t   r5   rW   c                   @  s¾   e Zd ZU dZded< ded< ded< ded< d	ed
< ded< ded< ded< ed1dd„ƒZed2dd„ƒZd3dd„Zd4dd„Zd5dd„Zd6d"d#„Z	d7d$d%„Z
d8d'd(„Zd9d,d-„Zd:d.d/„Zd0S );ÚHTTPDigestAuthz@Attaches HTTP Digest Authentication to the given Request object.r   r   r   zthreading.localÚ_thread_localr   Ú
last_nonceÚintÚnonce_countzdict[str, str]Úchalz
int | NoneÚposÚnum_401_callsr   r7   c                 C  r8   r9   r%   r:   r%   r%   r&   r;   ˆ   r<   zHTTPDigestAuth.__init__r=   c                 C  r8   r9   r%   r:   r%   r%   r&   r;   Š   r<   c                 C  s   || _ || _t ¡ | _d S r9   )r   r   Ú	threadingÚlocalrY   r:   r%   r%   r&   r;   �   s   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   )ÚhasattrrY   rb   rZ   r\   r]   r^   r_   )r-   r%   r%   r&   Úinit_per_thread_state“   s   úz$HTTPDigestAuth.init_per_thread_stateÚmethodÚurlú
str | Nonec                   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>d5dd„}	|	‰ n#|dkrJd5dd„}
|
‰ n|dkrVd5dd„}|‰ n|dkrad5dd„}|‰ ˆ du rgdS d6‡ fdd„}d}t|ƒ}|jpxd}|jr„|d|j› �7 }| j› d|› d| j› �}|› d|› �}ˆ |ƒ}ˆ |ƒ}|| j j	kr®| j  j
d7  _
nd| j _
| j j
d ›}t| j j
ƒ d!¡}|| d!¡7 }|t ¡  d!¡7 }|t d"¡7 }tj|d#d$� ¡ dd%… }|dkrõˆ |› d|› d|› �ƒ}|�s|||› d|› �ƒ}n"|d&k�sd&| d'¡v �r#|› d|› d|› d(|› �}|||ƒ}ndS || j _	d)| j› d*|› d+|› d,|› d-|› d.�}|�rG|d/|› d.�7 }|�rR|d0|› d.�7 }|�r]|d1|› d.�7 }|�rk|d2|› d3|› d.�7 }d4|› �S )7z
        :rtype: str
        ÚrealmÚnonceÚqopÚ	algorithmÚopaqueNÚMD5zMD5-SESSÚxústr | bytesr   r   c                 S  ó&   t | tƒr
|  d¡} tj| dd� ¡ S ©Núutf-8F©Úusedforsecurity)r   r   r!   ÚhashlibÚmd5Ú	hexdigest©ro   r%   r%   r&   Úmd5_utf8°   ó   

z4HTTPDigestAuth.build_digest_header.<locals>.md5_utf8ÚSHAc                 S  rq   rr   )r   r   r!   rv   Úsha1rx   ry   r%   r%   r&   Úsha_utf8¸   r{   z4HTTPDigestAuth.build_digest_header.<locals>.sha_utf8zSHA-256c                 S  rq   rr   )r   r   r!   rv   Úsha256rx   ry   r%   r%   r&   Úsha256_utf8À   r{   z7HTTPDigestAuth.build_digest_header.<locals>.sha256_utf8zSHA-512c                 S  rq   rr   )r   r   r!   rv   Úsha512rx   ry   r%   r%   r&   Úsha512_utf8È   r{   z7HTTPDigestAuth.build_digest_header.<locals>.sha512_utf8ÚsÚdc                   s   ˆ | › d|› �ƒS )Nú:r%   )rƒ   r„   ©Ú	hash_utf8r%   r&   ÚKDÒ   s   z.HTTPDigestAuth.build_digest_header.<locals>.KDú/ú?r…   r	   Ú08xrs   é   Frt   é   Ú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 )ro   rp   r   r   )rƒ   r   r„   r   r   r   )rY   r]   ÚgetÚupperr   ÚpathÚqueryr   r   rZ   r\   r   r!   ÚtimeÚctimeÚosÚurandomrv   r}   rx   Úsplit)r-   rf   rg   ri   rj   rk   rl   rm   Ú
_algorithmrz   r~   r€   r‚   rˆ   ÚentdigÚp_parsedr“   ÚA1ÚA2ÚHA1ÚHA2Úncvaluerƒ   ÚcnonceÚrespdigÚnoncebitÚbaser%   r†   r&   Úbuild_digest_header�   s„   




ÿÿÿ
z"HTTPDigestAuth.build_digest_headerr*   r   Úkwargsr   c                 K  s   |j r	d| j_dS dS )z)Reset num_401_calls counter on redirects.r	   N)Úis_redirectrY   r_   )r-   r*   r§   r%   r%   r&   Úhandle_redirect  s   ÿzHTTPDigestAuth.handle_redirectc           
      K  sP  d|j   krdk sn d| j_|S | jjdur*t|jjddƒ }dur*|| 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d|jƒ}t||j|jƒ | |¡ |  tt|jƒtt|jƒ¡}|r�||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	   NÚseekzwww-authenticaterc   Údigesté   zdigest )Úflags)Úcountr   rM   ) Ústatus_coderY   r_   r^   rE   ÚrequestÚbodyrO   r‘   ÚlowerÚreÚcompileÚ
IGNORECASEr   Úsubr]   ÚcontentÚcloseÚcopyr   Ú_cookiesr   ÚrawÚprepare_cookiesr¦   r   rf   rg   Ú
connectionÚsendÚhistoryÚappend)
r-   r*   r§   rª   Ús_authÚpatÚprepÚ
cookie_jarÚ_digest_authÚ_rr%   r%   r&   Ú
handle_401  s8   	

ÿ
zHTTPDigestAuth.handle_401r   c                 C  sŒ   |   ¡  | jjr|  tt|jƒtt|jƒ¡}|r||jd< t	|j
dd ƒ }d ur.|ƒ | j_nd | j_| d| j¡ | d| j¡ d| j_|S )NrM   ÚtellÚresponser	   )re   rY   rZ   r¦   r   r   rf   rg   rO   rE   r±   r^   Úregister_hookrÇ   r©   r_   )r-   r*   rÅ   rÈ   r%   r%   r&   r.   A  s   ÿ
zHTTPDigestAuth.__call__r>   r?   r@   c                 C  rA   rB   rC   rF   r%   r%   r&   rG   Y  rH   zHTTPDigestAuth.__eq__c                 C  rI   r9   r%   rF   r%   r%   r&   rJ   a  rK   zHTTPDigestAuth.__ne__NrQ   rR   rS   )r   r7   )rf   r   rg   r   r   rh   )r*   r   r§   r   r   r7   )r*   r   r§   r   r   r   r/   rT   rU   )r1   r2   r3   r4   rV   r   r;   re   r¦   r©   rÇ   r.   rG   rJ   r%   r%   r%   r&   rX   |   s,   
 




o

0
rX   )r   r   r   r   r   r   )(r4   Ú
__future__r   rv   r—   r³   r`   r•   r   Úbase64r   Útypingr   r   r   r   r   Ú_internal_utilsr
   Úcompatr   r   r   Úcookiesr   Úutilsr   Úhttp.cookiejarr   Úmodelsr   r   r   rV   r   r'   r)   r6   rW   rX   r%   r%   r%   r&   Ú<module>   s2    
,