o a{-@srdZddlZddlmZmZmZddlmZmZm Z m Z m Z m Z m Z mZmZmZmZmZmZmZGdddZdS)z oauthlib.oauth1.rfc5849.endpoints.base ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This module is an implementation of various logic needed for signing and checking OAuth 1.0 RFC 5849 requests. N)CaseInsensitiveDictRequestgenerate_token)CONTENT_TYPE_FORM_URLENCODEDSIGNATURE_HMAC_SHA1SIGNATURE_HMAC_SHA256SIGNATURE_HMAC_SHA512SIGNATURE_RSA_SHA1SIGNATURE_RSA_SHA256SIGNATURE_RSA_SHA512SIGNATURE_PLAINTEXTSIGNATURE_TYPE_AUTH_HEADERSIGNATURE_TYPE_BODYSIGNATURE_TYPE_QUERYerrors signatureutilsc@s@eZdZdddZddZddZdd Zd d Zdd dZdS) BaseEndpointNcCs||_|pt|_dSN)request_validatorrtoken_generator)selfrrrH/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/base.py__init__szBaseEndpoint.__init__c Cstj|jddd}tj|jdd}tj|jdd}g}||||||ttddt|t |ft |t |ft |t |ff}t |dkr`d d |D}tjd d |fd z |d\}}} Wn tyvtjdd w||| fS)zExtracts parameters from query, headers and body. Signature type is set to the source in which parameters were found. FT)headersexclude_oauth_signature with_realm)bodyr) uri_queryrcSs|dS)Nrr)srrr-sz=BaseEndpoint._get_signature_type_and_params..cSsg|]}|dqS)rr).0r!rrr 7sz?BaseEndpoint._get_signature_type_and_params..zFoauth_ params must come from only 1 signaturetype but were found in %sz,  descriptionr#Missing mandatory OAuth parameters.)rcollect_parametersrrr extendlistfilterrrfilter_oauth_paramsrrlenrInvalidRequestErrorjoin IndexError) rrequest header_params body_params query_paramsparams!signature_types_with_oauth_params found_typessignature_type oauth_paramsrrr_get_signature_type_and_paramssR       z+BaseEndpoint._get_signature_type_and_paramsc Cs$t|pi}d|vrt|dvrt||||}nt||d|}||\}}}tt|t|kr7tjddt|}|d|_ |d|_ |d|_ |d|_ |d |_ |d |_|d |_|d |_t|d |_||_dd|D|_d |jddvrdd|jD|_|S)Nz Content-TypezDuplicate OAuth1 entries.r&oauth_signatureoauth_consumer_key oauth_token oauth_nonceoauth_timestampoauth_callbackoauth_verifieroauth_signature_methodrealmcS g|] \}}|dkr||fqS)r=rr$kvrrrr%fs z0BaseEndpoint._create_request.. AuthorizationcSrF)rErrGrrrr%is)rrrr;r.dictrr/getr client_keyresource_owner_keynonce timestamp redirect_uriverifiersignature_methodrEr:r6r) ruri http_methodrrr2r9r6r:rrr_create_requestFs8          zBaseEndpoint._create_requestcCs(|jjr|jdstdSdS)Nzhttps://)r enforce_sslrTlower startswithrInsecureTransportError)rr2rrr_check_transport_securityns z&BaseEndpoint._check_transport_securitycCst|j|j|j|j|jfstjdd|j|jj vr(tj d |j|jj dd|j vr:|j ddkr:tjddt |jdkrGtjddzt|j}Wn ty[tjd dwtt||jjkrrtjd |jjd|j|jstjd d|j|jstjd ddS) Nr(r&z"Invalid signature, {} not in {!r}. oauth_versionz1.0zInvalid OAuth version. zInvalid timestamp sizezTimestamp must be an integer.zCTimestamp given is invalid, differ from allowed by over %s seconds.zInvalid client key format.zInvalid nonce format.)allrrMrOrPrSrr/rallowed_signature_methodsInvalidSignatureMethodErrorformatr:r.int ValueErrorabstimetimestamp_lifetimecheck_client_key check_nonce)rr2tsrrr_check_mandatory_parametersts^    z(BaseEndpoint._check_mandatory_parametersFcCsD|jtks|jtks|jtkrB|j|j|}|jtkr$t||}|S|jtkr1t ||}|S|jtkr>t ||}|Sd}|S|j |j|}d}|j rf|r\|j |j|j |}n |j|j|j |}|jtkrtt|||}|S|jtkrt|||}|S|jtkrt|||}|S|jtkrt|||}|Sd}|S)NF)rSr r r r get_rsa_keyrMrverify_rsa_sha1verify_rsa_sha256verify_rsa_sha512get_client_secretrNget_request_token_secretget_access_token_secretrverify_hmac_sha1rverify_hmac_sha256r verify_hmac_sha512r verify_plaintext)rr2is_token_requestrsa_keyvalid_signature client_secretresource_owner_secretrrr_check_signaturesn     1 / -+    zBaseEndpoint._check_signaturer)F) __name__ __module__ __qualname__rr;rVr[rjr{rrrrrs *(Br)__doc__reoauthlib.commonrrrr<rrrr r r r r rrrrrrrrrrrs @