
    1j/                    L   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rd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Z# G d d      Z$ G d de$      Z% G d de%      Z& G d de$      Z'y)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_PARTc           	        t        | t              s*t        j                  d| dt               t        |       } t        |t              s3t        j                  dt        |      dt               t        |      }t        | t
              r| j                  d      } t        |t
              r|j                  d      }dt        t        dj                  | |f            j                               z   }|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)usernamepasswordauthstrs      A/home/qreelify/venv/lib/python3.12/site-packages/requests/auth.py_basic_auth_strr&   "   s     h
+BBJ N (	
 x=h
+BBFx.AS T (	
 x= (C ??8,(C ??8,)$))Xx01288: G N    c                      e Zd ZdZddZy)AuthBasez4Base class that all auth implementations derive fromc                    t        d      )NzAuth hooks must be callable.)NotImplementedErrorselfrs     r%   __call__zAuthBase.__call__Q   s    !"@AAr'   Nr.   r   returnr   __name__
__module____qualname____doc__r/    r'   r%   r)   r)   N   s    >Br'   r)   c                  j    e Zd ZU dZded<   ded<   edd       Zedd       ZddZddZdd	Zdd
Z	y)HTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.bytes | strr"   r#   c                     y Nr7   r-   r"   r#   s      r%   __init__zHTTPBasicAuth.__init__[       >Ar'   c                     y r<   r7   r=   s      r%   r>   zHTTPBasicAuth.__init__]       BEr'   c                     || _         || _        y r<   )r"   r#   r=   s      r%   r>   zHTTPBasicAuth.__init__`   s      r'   c           	     |    t        | j                  t        |dd       k(  | j                  t        |dd       k(  g      S Nr"   r#   allr"   getattrr#   r-   others     r%   __eq__zHTTPBasicAuth.__eq__d   >    
D!AA
D!AA
 	
r'   c                    | |k(   S r<   r7   rH   s     r%   __ne__zHTTPBasicAuth.__ne__l       5=  r'   c                `    t        | j                  | j                        |j                  d<   |S )NAuthorizationr&   r"   r#   headersr,   s     r%   r/   zHTTPBasicAuth.__call__o   s$    %4T]]DMM%R		/"r'   Nr"   r   r#   r   r1   Noner"   bytesr#   rV   r1   rT   r"   r:   r#   r:   r1   rT   rI   objectr1   boolrI   r   r1   rZ   r0   )
r3   r4   r5   r6   __annotations__r	   r>   rJ   rM   r/   r7   r'   r%   r9   r9   U   sA    IA AE E!
!r'   r9   c                      e Zd ZdZddZy)HTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.c                `    t        | j                  | j                        |j                  d<   |S )NzProxy-AuthorizationrQ   r,   s     r%   r/   zHTTPProxyAuth.__call__w   s%    +:4==$--+X		'(r'   Nr0   r2   r7   r'   r%   r^   r^   t   s
    Gr'   r^   c                      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dd       Ze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$dZy)%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_callsc                     y r<   r7   r=   s      r%   r>   zHTTPDigestAuth.__init__   r?   r'   c                     y r<   r7   r=   s      r%   r>   zHTTPDigestAuth.__init__   rA   r'   c                R    || _         || _        t        j                         | _        y r<   )r"   r#   	threadinglocalrb   r=   s      r%   r>   zHTTPDigestAuth.__init__   s      &__.r'   c                    t        | j                  d      sgd| j                  _        d| j                  _        d| j                  _        i | j                  _        d | j                  _        d | j                  _        y y )NinitT r   )hasattrrb   ro   rc   re   rf   rg   rh   )r-   s    r%   init_per_thread_statez$HTTPDigestAuth.init_per_thread_state   sk    t))62&*D#,.D)-.D*&(D#%)D"/3D, 3r'   c                P   | j                   j                  d   }| j                   j                  d   }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }d|d}n|j                         }|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}|yd+fd}d}t	        |      }|j
                  xs d}|j                  r|d|j                   z  }| j                   d| d| j                   }| d| } |      } |      }|| j                   j                  k(  r | j                   xj                  dz  c_
        nd| j                   _
        | j                   j                  d}t        | j                   j                        j                  d      }||j                  d      z  }|t        j                         j                  d      z  }|t        j                   d      z  }t#        j$                  |d      j'                         dd }|dk(  r | d| d|       }|s ||| d|       }n0|dk(  sd|j)                  d      v r| d| d| d| } |||      }ny|| j                   _	        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 ),z
        :rtype: str
        realmnonceqop	algorithmopaqueNMD5zMD5-SESSc                    t        | t              r| j                  d      } t        j                  | d      j                         S Nutf-8Fusedforsecurity)r   r   r   hashlibmd5	hexdigestxs    r%   md5_utf8z4HTTPDigestAuth.build_digest_header.<locals>.md5_utf8   s4    a%)A{{1e<FFHHr'   SHAc                    t        | t              r| j                  d      } t        j                  | d      j                         S r{   )r   r   r   r   sha1r   r   s    r%   sha_utf8z4HTTPDigestAuth.build_digest_header.<locals>.sha_utf8   s4    a%)A||Au=GGIIr'   zSHA-256c                    t        | t              r| j                  d      } t        j                  | d      j                         S r{   )r   r   r   r   sha256r   r   s    r%   sha256_utf8z7HTTPDigestAuth.build_digest_header.<locals>.sha256_utf8   4    a%)A~~a?IIKKr'   zSHA-512c                    t        | t              r| j                  d      } t        j                  | d      j                         S r{   )r   r   r   r   sha512r   r   s    r%   sha512_utf8z7HTTPDigestAuth.build_digest_header.<locals>.sha512_utf8   r   r'   c                     |  d|       S )N:r7   )sd	hash_utf8s     r%   KDz.HTTPDigestAuth.build_digest_header.<locals>.KD   s    s!A3Z((r'   /?r   r
   08xr|      Fr}      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   zstr | bytesr1   r   )r   r   r   r   r1   r   )rb   rf   getupperr   pathqueryr"   r#   rc   re   r   r   timectimeosurandomr   r   r   split)r-   methodurlrt   ru   rv   rw   rx   
_algorithmr   r   r   r   r   entdigp_parsedr   A1A2HA1HA2ncvaluer   cnoncerespdignoncebitbaser   s                              @r%   build_digest_headerz"HTTPDigestAuth.build_digest_header   s   
 ""''0""''0  %%))%0&&++//<	##((,,X6	J"*J*
":I
 !I5 J
 !I9$L
 $I9$L
 $I	) C=}}#>>a'((Dawa7xqmmD&&111**a/*-.D*''33C8""../66w?	U\\'""	TZZ\  ))	RZZ]a7AACCRH#se1UG1VH56Cq./GF]f		#6'!F86#?Hh'G (-% z%
5' J6wiq2 	 j**DmI;a00Dj**D'y
6(!DDDr'   c                @    |j                   rd| j                  _        yy)z)Reset num_401_calls counter on redirects.r
   N)is_redirectrb   rh   )r-   r.   kwargss      r%   handle_redirectzHTTPDigestAuth.handle_redirect  s    ==/0D, r'   c                   d|j                   cxk  rdk  sn d| j                  _        |S | j                  j                  ?t	        |j
                  j                  dd      x} || j                  j                         |j                  j                  dd      }d|j                         v r| j                  j                  d	k  r| j                  xj                  dz  c_        t        j                  d
t        j                        }t        |j                  d|d            | j                  _        |j                    |j#                          |j
                  j%                         }t'        d|j(                        }t+        ||j
                  |j,                         |j/                  |       | j1                  t'        t2        |j4                        t'        t2        |j6                              }|r||j                  d<    |j8                  j:                  |fi |}	|	j<                  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-authenticaterp   digest   zdigest )flags)countr   rP   ) status_coderb   rh   rg   rG   requestbodyrR   r   lowerrecompile
IGNORECASEr   subrf   contentclosecopyr   _cookiesr   rawprepare_cookiesr   r   r   r   
connectionsendhistoryappend)
r-   r.   r   r   s_authpatprep
cookie_jar_digest_auth_rs
             r%   
handle_401zHTTPDigestAuth.handle_401  s    amm)c)/0D,H!!-  		==JT''++,126v||~%$*<*<*J*JQ*N,,1,**Zr}}=C&7FRS8T&UD# IIGGI99>>#Dk4==9J":qyy!%%@  ,33S$++&S$(((;L 0<_-"""4262BJJa BJI+,(r'   c                   | j                          | j                  j                  rS| j                  t	        t
        |j                        t	        t
        |j                              }|r||j                  d<   t        |j                  dd       x} |       | j                  _        nd | j                  _        |j                  d| j                         |j                  d| j                         d| j                  _        |S )NrP   tellresponser
   )rr   rb   rc   r   r   r   r   r   rR   rG   r   rg   register_hookr   r   rh   )r-   r.   r   r   s       r%   r/   zHTTPDigestAuth.__call__A  s    ""$((33S!((#T#quu%5L -9		/*AFFFD11D>%)VD" &*D"	
DOO4	
D$8$89+,(r'   c           	     |    t        | j                  t        |dd       k(  | j                  t        |dd       k(  g      S rD   rE   rH   s     r%   rJ   zHTTPDigestAuth.__eq__Y  rK   r'   c                    | |k(   S r<   r7   rH   s     r%   rM   zHTTPDigestAuth.__ne__a  rN   r'   NrS   rU   rW   )r1   rT   )r   r   r   r   r1   z
str | None)r.   r   r   r   r1   rT   )r.   r   r   r   r1   r   r0   rX   r[   )r3   r4   r5   r6   r\   r	   r>   rr   r   r   r   r/   rJ   rM   r7   r'   r%   ra   ra   |   sz    J""O
	OA AE E/4m ^1
.`0
!r'   ra   )r"   r:   r#   r:   r1   r   )(r6   
__future__r   r   r   r   rl   r   r   base64r   typingr   r   r   r   r	   _internal_utilsr   compatr   r   r   cookiesr   utilsr   http.cookiejarr   modelsr   r   r   r\   r   r&   r)   r9   r^   ra   r7   r'   r%   <module>r      s    #  	 	     < < - - - + $(1&I e I!6  6)XB BH >M f!X f!r'   