3 ,[s(@sldZddlmZmZddlZddlmZmZddlm Z m Z m Z m Z m Z mZmZmZmZGdddeZdS) 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. )absolute_importunicode_literalsN)Requestgenerate_token) CONTENT_TYPE_FORM_URLENCODEDSIGNATURE_HMAC SIGNATURE_RSASIGNATURE_TYPE_AUTH_HEADERSIGNATURE_TYPE_BODYSIGNATURE_TYPE_QUERYerrors signatureutilsc@s@eZdZdddZddZddZdd Zd d Zdd dZdS) BaseEndpointNcCs||_|p t|_dS)N)request_validatorrtoken_generator)selfrrr/usr/lib/python3.6/base.py__init__szBaseEndpoint.__init__c Cstj|jddd}tj|jdd}tj|jdd}g}|j||j||j|ttddt|t j |ft |t j |ft |t j |ff}t |dkrd d |D}tjd d j|fd y|d\}}} Wn tk rtjdd YnX||| fS)zExtracts parameters from query, headers and body. Signature type is set to the source in which parameters were found. FT)headersexclude_oauth_signatureZ with_realm)bodyr) uri_queryrcSs|dS)Nrr)srrr+sz=BaseEndpoint._get_signature_type_and_params..cSsg|] }|dqS)rr).0rrrr 5sz?BaseEndpoint._get_signature_type_and_params..zFoauth_ params must come from only 1 signaturetype but were found in %sz, ) descriptionrz#Missing mandatory OAuth parameters.)rZcollect_parametersrrrextendlistfilterr rZfilter_oauth_paramsr r lenr InvalidRequestErrorjoin IndexError) rrequestZ header_paramsZ body_paramsZ query_paramsparamsZ!signature_types_with_oauth_paramsZ found_typessignature_type oauth_paramsrrr_get_signature_type_and_paramss:        z+BaseEndpoint._get_signature_type_and_paramsc Cs"|pi}d|kr,t|dkr,t||||}nt||d|}|j|\}}}tt|t|krjtjddt|}|jd|_|jd|_ |jd|_ |jd|_ |jd |_ |jd |_ |jd |_|jd |_t|jd |_||_dd|D|_d |jjddkrdd|jD|_|S)Nz Content-TypezDuplicate OAuth1 entries.)r oauth_signatureZoauth_consumer_keyZ oauth_tokenZ oauth_nonceZoauth_timestampZoauth_callbackZoauth_verifierZoauth_signature_methodrealmcSs g|]\}}|dkr||fqS)r.r)rkvrrrrdsz0BaseEndpoint._create_request..Z AuthorizationcSs g|]\}}|dkr||fqS)r/r)rr0r1rrrrgs)rrr,r$dictr r%getr client_keyresource_owner_keynonce timestampZ redirect_uriZverifiersignature_methodr/r+r)r) ruriZ http_methodrrr(r*r)r+rrr_create_requestDs2          zBaseEndpoint._create_requestcCs&|jjr"|jjjd r"tjdS)Nzhttps://)rZ enforce_sslr9lower startswithr ZInsecureTransportError)rr(rrr_check_transport_securitylsz&BaseEndpoint._check_transport_securityc Cs&t|j|j|j|j|jfs(tjdd|j|jj krPtj d|j|jj fdd|j krt|j ddkrttjddt |jdkrtjddyt |j}Wn tk rtjd dYn.Xttj||jjkrtjd |jjd|jj|jstjd d|jj|js"tjd ddS) Nz#Missing mandatory OAuth parameters.)r z Invalid signature, %s not in %r.Z 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.)allrr4r6r7r8r r%rZallowed_signature_methodsZInvalidSignatureMethodErrorr+r$int ValueErrorabstimeZtimestamp_lifetimeZcheck_client_keyZ check_nonce)rr(Ztsrrr_check_mandatory_parametersrsB     z(BaseEndpoint._check_mandatory_parametersFcCs|jtkr(|jj|j|}tj||}np|jj|j|}d}|jrp|r\|jj |j|j|}n|jj |j|j|}|jt krtj |||}ntj |||}|S)N)r8r rZ get_rsa_keyr4rZverify_rsa_sha1Zget_client_secretr5Zget_request_token_secretZget_access_token_secretrZverify_hmac_sha1Zverify_plaintext)rr(Zis_token_requestZrsa_keyZvalid_signatureZ client_secretZresource_owner_secretrrr_check_signatures&      zBaseEndpoint._check_signature)N)F) __name__ __module__ __qualname__rr,r:r=rDrErrrrrs  *(Br)__doc__Z __future__rrrCZoauthlib.commonrrr-rrr r r r r rrobjectrrrrrs ,