&`hAdZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z ddl mZmZejeZdZdZdZeZd Zd Zd ZeZd ZeeeeeeefZd ZdZdZdZ GddZ!dS)a oauthlib.oauth1.rfc5849 ~~~~~~~~~~~~~~ This module is an implementation of various logic needed for signing and checking OAuth 1.0 RFC 5849 requests. It supports all three standard signature methods defined in RFC 5849: - HMAC-SHA1 - RSA-SHA1 - PLAINTEXT It also supports signature methods that are not defined in RFC 5849. These are based on the standard ones but replace SHA-1 with the more secure SHA-256: - HMAC-SHA256 - RSA-SHA256 N)Requestgenerate_noncegenerate_timestamp to_unicode urlencode) parameters signaturez HMAC-SHA1z HMAC-SHA256z HMAC-SHA512zRSA-SHA1z RSA-SHA256z RSA-SHA512 PLAINTEXT AUTH_HEADERQUERYBODY!application/x-www-form-urlencodedceZdZdZeejeeje ej e ej e ejeejeejiZedZddddeedddddddf dZdZdZdZd d Zdd ZdS)Clientz2A client used to sign OAuth 1.0 RFC 5849 requests.c||j|<dSN)SIGNATURE_METHODS)cls method_namemethod_callbacks B/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/__init__.pyregister_signature_methodz Client.register_signature_methodWs-<k***Nutf-8c fd}|||_|||_|||_|||_|||_|||_|||_|||_|| |_|| |_ | |_ || |_ || |_ |||_ dS)aCreate an OAuth 1 client. :param client_key: Client key (consumer key), mandatory. :param resource_owner_key: Resource owner key (oauth token). :param resource_owner_secret: Resource owner secret (oauth token secret). :param callback_uri: Callback used when obtaining request token. :param signature_method: SIGNATURE_HMAC, SIGNATURE_RSA or SIGNATURE_PLAINTEXT. :param signature_type: SIGNATURE_TYPE_AUTH_HEADER (default), SIGNATURE_TYPE_QUERY or SIGNATURE_TYPE_BODY depending on where you want to embed the oauth credentials. :param rsa_key: RSA key used with SIGNATURE_RSA. :param verifier: Verifier used when obtaining an access token. :param realm: Realm (scope) to which access is being requested. :param encoding: If you provide non-unicode input you may use this to have oauthlib automatically convert. :param decoding: If you wish that the returned uri, headers and body from sign be encoded back from unicode, then set decoding to your preferred encoding, i.e. utf-8. :param nonce: Use this nonce instead of generating one. (Mainly for testing) :param timestamp: Use this timestamp instead of using current. (Mainly for testing) c,rt|n|Sr)r)xencodings rz!Client.__init__..|shE:a222ArN) client_key client_secretresource_owner_keyresource_owner_secretsignature_methodsignature_type callback_urirsa_keyverifierrealmrdecodingnonce timestamp)selfr!r"r#r$r'r%r&r(r)r*rr+r,r-encodes ` r__init__zClient.__init__[s BFEEE &,,#VM22"(&);"<"<%+V,A%B%B" &'7 8 8$f^44"F<00vg x(( VE]] x(( x(( VE]]  **rc@t|}|drdnd|d<|drdnd|d<|drdnd|d<dd|D}d|jj|S)Nr"z****r(r$z, c3HK|]\}}d||VdS)z{}={}N)format).0kvs r z"Client.__repr__..s4!Q!Q41a'..A"6"6!Q!Q!Q!Q!Q!Qrz<{} {}>)varscopyjoinitemsr3 __class____name__)r.attrs attribute_strs r__repr__zClient.__repr__sT !!+0+A!Kto%*9%5?664i167N1O'YvvUY  # % !Q!Q5;;==!Q!Q!QQQ  7GGGrc|jtkrtj|j|jS||\}}}tjtj|j ||}t d |tj |}tj||dd}t d |t d |tj|j||}t d ||j|jvrt'd|j|j||} t d | | S) awGet an OAuth signature to be used in signing a request To satisfy `section 3.4.1.2`_ item 2, if the request argument's headers dict attribute contains a Host item, its value will replace any netloc part of the request argument's uri attribute value. .. _`section 3.4.1.2`: https://tools.ietf.org/html/rfc5849#section-3.4.1.2 ) uri_querybodyheaderszCollected params: {}HostNzNormalized params: {}zNormalized URI: {}z"Signing: signature base string: {}zInvalid signature method.z Signature: {})r%SIGNATURE_PLAINTEXTr sign_plaintextr"r$_rendercollect_parametersurlparsequerylogdebugr3normalize_parametersbase_string_urigetsignature_base_string http_methodr ValueError) r.requesturirDrCcollected_paramsnormalized_paramsnormalized_uri base_stringsigs rget_oauth_signaturezClient.get_oauth_signatures  $7 7 7+D,>,0,FHH H"\\'22Wd$7',,2 (//0@AABBB%:;KLL"23 FD8Q8QRR )001BCCDDD &--n==>>>5g6I6DFWYY  6==kJJKKK  (> > >899 9;d$T%:;KNN /((--... rc |jtn|j}|jtn|j}d|fd|fdd|jfd|jfg}|jr|d|jf|jr|d|jf|j r|d |j f|j d d}|o| d d k}|j z|rx|d tjt!j|j ddf|S)zMGet the basic OAuth parameters to be used in generating a signature. N oauth_nonceoauth_timestamp) oauth_versionz1.0oauth_signature_methodoauth_consumer_key oauth_tokenoauth_callbackoauth_verifier Content-Typerroauth_body_hashr)r,rr-rr%r!r#appendr'r)rDrPfindrCbase64 b64encodehashlibsha1r/digestdecode)r.rTr,r-params content_typecontent_type_eligibles rget_oauth_paramszClient.get_oauth_paramssJ& !!!,0J .()))48N E "  * $ %t'< = !4? 3    " D MM=$*AB C C C   A MM+T->? @ @ @ = = MM+T]; < < <**>4@@ , k1B1BCf1g1gjk1k < #(= # MM,f.>w|GLL_L_`gLhLh?i?i?p?p?r?r.s.s.z.z|C/D/DE F F F rFc|j|j|j}}}|jtkr"t j|j|j|}n|jtkr=|j 6t j |j|j }|rt|}d|d<n?|jtkr t j |j|j}ntd|||fS)aRender a signed request according to signature type Returns a 3-tuple containing the request URI, headers, and body. If the formencode argument is True and the body contains parameters, it is escaped and returned as a valid formencoded string. )r*Nrrez!Unknown signature type specified.)rUrDrCr&SIGNATURE_TYPE_AUTH_HEADERr prepare_headers oauth_paramsSIGNATURE_TYPE_BODY decoded_bodyprepare_form_encoded_bodyrSIGNATURE_TYPE_QUERYprepare_request_uri_queryrS)r.rT formencoder*rUrDrCs rrHzClient._renders%['/7#{D'#'=222**>4@@  J\%<%<\%J%J )-II)5 & K& KQSS S  K KQSS S$ K  K &|'@y(D!F!FGG G $7 7 7"8'18:C8OQQ Q   O 3 3 3IJJ J $44W== ##  8 8 A A B D D D"\\'d161D$**GGWd = " II=t} M M M**T]++C15?4;;t}---4DK  O O178xx 7N7N AHHT]3344!GGT!!r)FN)r}NNN)r= __module__ __qualname____doc__SIGNATURE_HMAC_SHA1r sign_hmac_sha1_with_clientSIGNATURE_HMAC_SHA256sign_hmac_sha256_with_clientSIGNATURE_HMAC_SHA512sign_hmac_sha512_with_clientSIGNATURE_RSA_SHA1sign_rsa_sha1_with_clientSIGNATURE_RSA_SHA256sign_rsa_sha256_with_clientSIGNATURE_RSA_SHA512sign_rsa_sha512_with_clientrFsign_plaintext_with_clientr classmethodrrtr0r@r[rrrHrrrrrJs<<YAyEyEI?iCiCYA==[= $$('+""5 :D!Dt0+0+0+0+dHHH'''R!!!F#"#"#"#"Jf"f"f"f"f"f"rr)"rrirklogging urllib.parseparserJoauthlib.commonrrrrrr r getLoggerr=rLrrrSIGNATURE_HMACrrr SIGNATURE_RSArFrrtrzrwrrrrrrs[( $#######g!!"%%$##" !+Bc"c"c"c"c"c"c"c"c"c"r