
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
,[s(                 @   sl   d Z ddlmZmZ ddlZddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZ G dd deZdS )	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_importunicode_literalsN)Requestgenerate_token   )	CONTENT_TYPE_FORM_URLENCODEDSIGNATURE_HMACSIGNATURE_RSASIGNATURE_TYPE_AUTH_HEADERSIGNATURE_TYPE_BODYSIGNATURE_TYPE_QUERYerrors	signatureutilsc               @   s@   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdddZdS )BaseEndpointNc             C   s   || _ |pt| _d S )N)request_validatorr   token_generator)selfr   r    r   /usr/lib/python3.6/base.py__init__   s    zBaseEndpoint.__init__c       
      C   s   t j|jddd}t j|jdd}t j|jdd}g }|j| |j| |j| ttdd t|t	j
|ft|t	j
|ft|t	j
|ff}t|dkrd	d
 |D }tjddj|fdy|d \}}}	W n  tk
r   tjddY nX |||	fS )zExtracts parameters from query, headers and body. Signature type
        is set to the source in which parameters were found.
        FT)headersexclude_oauth_signatureZ
with_realm)bodyr   )	uri_queryr   c             S   s   | d S )Nr   r   )sr   r   r   <lambda>+   s    z=BaseEndpoint._get_signature_type_and_params.<locals>.<lambda>   c             S   s   g | ]}|d  qS )r   r   ).0r   r   r   r   
<listcomp>5   s    z?BaseEndpoint._get_signature_type_and_params.<locals>.<listcomp>zFoauth_ params must come from only 1 signaturetype but were found in %sz, )descriptionr   z#Missing mandatory OAuth parameters.)r   Zcollect_parametersr   r   r   extendlistfilterr
   r   Zfilter_oauth_paramsr   r   lenr   InvalidRequestErrorjoin
IndexError)
r   requestZheader_paramsZbody_paramsZquery_paramsparamsZ!signature_types_with_oauth_paramsZfound_typessignature_typeoauth_paramsr   r   r   _get_signature_type_and_params   s:    






z+BaseEndpoint._get_signature_type_and_paramsc       	      C   s"  |pi }d|kr,t |d kr,t||||}nt||d|}| j|\}}}tt|t|krjtjddt|}|jd|_|jd|_	|jd|_
|jd|_|jd	|_|jd
|_|jd|_|jd|_t|jd|_||_dd |D |_d|jjddkrdd |jD |_|S )NzContent-Type zDuplicate OAuth1 entries.)r    oauth_signatureZoauth_consumer_keyZoauth_tokenZoauth_nonceZoauth_timestampZoauth_callbackZoauth_verifierZoauth_signature_methodrealmc             S   s    g | ]\}}|d kr||fqS )r.   r   )r   kvr   r   r   r   d   s    z0BaseEndpoint._create_request.<locals>.<listcomp>ZAuthorizationc             S   s    g | ]\}}|d kr||fqS )r/   r   )r   r0   r1   r   r   r   r   g   s   )r   r   r,   r$   dictr   r%   getr   
client_keyresource_owner_keynonce	timestampZredirect_uriZverifiersignature_methodr/   r+   r)   r   )	r   uriZhttp_methodr   r   r(   r*   r)   r+   r   r   r   _create_requestD   s2    zBaseEndpoint._create_requestc             C   s&   | j jr"|jj jd r"tj d S )Nzhttps://)r   Zenforce_sslr9   lower
startswithr   ZInsecureTransportError)r   r(   r   r   r   _check_transport_securityl   s    z&BaseEndpoint._check_transport_securityc             C   s&  t |j|j|j|j|jfs(tjdd|j| jj	krPtj
d|j| jj	f dd|jkrt|jd dkrttjddt|jdkrtjddyt|j}W n  tk
r   tjd	dY n.X ttj | | jjkrtjd
| jj d| jj|jstjdd| jj|js"tjddd S )Nz#Missing mandatory OAuth parameters.)r    z Invalid signature, %s not in %r.Zoauth_versionz1.0zInvalid OAuth version.
   zInvalid timestamp sizezTimestamp must be an integer.zCTimestamp given is invalid, differ from allowed by over %s seconds.zInvalid client key format.zInvalid nonce format.)allr   r4   r6   r7   r8   r   r%   r   Zallowed_signature_methodsZInvalidSignatureMethodErrorr+   r$   int
ValueErrorabstimeZtimestamp_lifetimeZcheck_client_keyZcheck_nonce)r   r(   Ztsr   r   r   _check_mandatory_parametersr   sB    




z(BaseEndpoint._check_mandatory_parametersFc             C   s   |j tkr(| jj|j|}tj||}np| jj|j|}d }|jrp|r\| jj	|j|j|}n| jj
|j|j|}|j tkrtj|||}ntj|||}|S )N)r8   r	   r   Zget_rsa_keyr4   r   Zverify_rsa_sha1Zget_client_secretr5   Zget_request_token_secretZget_access_token_secretr   Zverify_hmac_sha1Zverify_plaintext)r   r(   Zis_token_requestZrsa_keyZvalid_signatureZclient_secretZresource_owner_secretr   r   r   _check_signature   s&    

	


zBaseEndpoint._check_signature)N)F)	__name__
__module____qualname__r   r,   r:   r=   rD   rE   r   r   r   r   r      s   
*(Br   )__doc__Z
__future__r   r   rC   Zoauthlib.commonr   r   r-   r   r   r	   r
   r   r   r   r   r   objectr   r   r   r   r   <module>   s
   ,