a Y&@sdZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z ddl mZddlmZddlmZd Zd Zd d ZGd ddeZGdddeZGdddeZGdddeZdS)z] requests.auth ~~~~~~~~~~~~~ This module contains the authentication handlers for Requests. N) b64encode)urlparsestr basestring)extract_cookies_to_jar)to_native_string)parse_dict_headerz!application/x-www-form-urlencodedzmultipart/form-datacCst|ts&tjd|tdt|}t|tsLtjd|tdt|}t|tr`|d}t|trt|d}dtt d ||f }|S)zReturns a Basic Auth string.zNon-string usernames will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({0!r}) to a string or bytes object in the near future to avoid problems.)categoryzNon-string passwords will no longer be supported in Requests 3.0.0. Please convert the object you've passed in ({0!r}) to a string or bytes object in the near future to avoid problems.latin1zBasic :) isinstancerwarningswarnformatDeprecationWarningrencoderrjoinstrip)usernamepasswordZauthstrr4/Users/ymaher/Downloads/lambdas_org/requests/auth.py_basic_auth_strs0      rc@seZdZdZddZdS)AuthBasez4Base class that all auth implementations derive fromcCs tddS)NzAuth hooks must be callable.)NotImplementedErrorselfrrrr__call__KszAuthBase.__call__N__name__ __module__ __qualname____doc__rrrrrrHsrc@s0eZdZdZddZddZddZdd Zd S) HTTPBasicAuthz?Attaches HTTP Basic Authentication to the given Request object.cCs||_||_dSN)rrrrrrrr__init__RszHTTPBasicAuth.__init__cCs(t|jt|ddk|jt|ddkgSNrrallrgetattrrrotherrrr__eq__VszHTTPBasicAuth.__eq__cCs ||k Sr&rr-rrr__ne__\szHTTPBasicAuth.__ne__cCst|j|j|jd<|S)N Authorizationrrrheadersrrrrr_szHTTPBasicAuth.__call__N)r!r"r#r$r(r/r0rrrrrr%Os r%c@seZdZdZddZdS) HTTPProxyAuthz=Attaches HTTP Proxy Authentication to a given Request object.cCst|j|j|jd<|S)NzProxy-Authorizationr2rrrrrgszHTTPProxyAuth.__call__Nr rrrrr4dsr4c@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)HTTPDigestAuthz@Attaches HTTP Digest Authentication to the given Request object.cCs||_||_t|_dSr&)rr threadinglocal _thread_localr'rrrr(oszHTTPDigestAuth.__init__cCs@t|jds.md5_utf8SHAcSs"t|tr|d}t|SrH)r rrrJsha1rLrMrrrsha_utf8s  z4HTTPDigestAuth.build_digest_header..sha_utf8csd||fS)N%s:%sr)sdZ hash_utf8rrz4HTTPDigestAuth.build_digest_header../?z%s:%s:%srSrz%08xrIauth,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)r8r>getupperrpathqueryrrr<r=rrtimectimeosurandomrJrQrLsplit)rmethodurlrBrCrDrErFZ _algorithmrOrRKDentdigZp_parsedraA1A2ZHA1ZHA2ncvaluerTcnoncerespdignoncebitbaserrVrbuild_digest_headersv            z"HTTPDigestAuth.build_digest_headercKs|jrd|j_dS)z)Reset num_401_calls counter on redirects.rN) is_redirectr8r@)rrkwargsrrrhandle_redirectszHTTPDigestAuth.handle_redirectcKs&d|jkrdks$nd|j_|S|jjdurB|jj|jj|jdd}d| vr|jjdkr|jjd7_t j d t j d }t |jd|dd |j_|j||j}t|j|j|j||j||j|j|jd <|jj|fi|}|j|||_|Sd|j_|S) zo Takes the given response and tries digest-auth, if needed. :rtype: requests.Response iirNzwww-authenticater:digestzdigest )flags)countr1) status_coder8r@r?requestbodyseekr3r_lowerrecompile IGNORECASEr subr>contentclosecopyr_cookiesrawprepare_cookiesrsrhri connectionsendhistoryappend)rrruZs_authpatZprep_rrrr handle_401s0      zHTTPDigestAuth.handle_401cCs|||jjr&||j|j|jd<z|j|j_ Wnt yRd|j_ Yn0| d|j | d|j d|j_|S)Nr1responser)rAr8r<rsrhrir3r}tellr?AttributeError register_hookrrvr@rrrrr s zHTTPDigestAuth.__call__cCs(t|jt|ddk|jt|ddkgSr)r*r-rrrr/szHTTPDigestAuth.__eq__cCs ||k Sr&rr-rrrr0$szHTTPDigestAuth.__ne__N) r!r"r#r$r(rArsrvrrr/r0rrrrr5ls Z,r5)r$rerrcrJr6rbase64rcompatrrrcookiesr_internal_utilsrutilsr ZCONTENT_TYPE_FORM_URLENCODEDZCONTENT_TYPE_MULTI_PARTrobjectrr%r4r5rrrrs$    ,