o
    a{-                     @   sr   d Z ddlZddlmZ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mZmZmZmZmZ G dd d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.
    N)CaseInsensitiveDictRequestgenerate_token   )CONTENT_TYPE_FORM_URLENCODEDSIGNATURE_HMAC_SHA1SIGNATURE_HMAC_SHA256SIGNATURE_HMAC_SHA512SIGNATURE_RSA_SHA1SIGNATURE_RSA_SHA256SIGNATURE_RSA_SHA512SIGNATURE_PLAINTEXT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   H/usr/lib/python3/dist-packages/oauthlib/oauth1/rfc5849/endpoints/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 }|| || || ttdd t|t	
|ft|t	
|ft|t	
|ff}t|dkr`d	d
 |D }tjdd|fdz	|d \}}}	W n tyv   tjddw |||	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>7   s    z?BaseEndpoint._get_signature_type_and_params.<locals>.<listcomp>zFoauth_ params must come from only 1 signaturetype but were found in %sz, descriptionr   #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   sR   



	
z+BaseEndpoint._get_signature_type_and_paramsc           	      C   s$  t |pi }d|v rt|d v rt||||}nt||d|}| |\}}}tt|t|kr7tjddt|}|d|_	|d|_
|d|_|d|_|d	|_|d
|_|d|_|d|_t|d|_||_dd |D |_d|jddv rd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       g | ]\}}|d kr||fqS )r5   r   r#   kvr   r   r   r$   f   s     z0BaseEndpoint._create_request.<locals>.<listcomp>ZAuthorizationc                 S   r7   )r6   r   r8   r   r   r   r$   i   s    )r   r   r   r3   r+   dictr   r,   getr   
client_keyresource_owner_keynonce	timestampZredirect_uriZverifiersignature_methodr6   r2   r0   r   )	r   uriZhttp_methodr   r   r/   r1   r0   r2   r   r   r   _create_requestF   s:   
zBaseEndpoint._create_requestc                 C   s(   | j jr|j dst d S d S )Nzhttps://)r   Zenforce_sslrB   lower
startswithr   ZInsecureTransportError)r   r/   r   r   r   _check_transport_securityn   s
   z&BaseEndpoint._check_transport_securityc                 C   s  t |j|j|j|j|jfstjdd|j| jj	vr(tj
d|j| jj	dd|jv r:|jd dkr:tjddt|jdkrGtjddzt|j}W n ty[   tjd	dw tt | | jjkrrtjd
| jj d| j|jstjdd| j|jstjddd S )Nr'   r%   z"Invalid signature, {} 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   r=   r?   r@   rA   r   r,   r   Zallowed_signature_methodsZInvalidSignatureMethodErrorformatr2   r+   int
ValueErrorabstimeZtimestamp_lifetimeZcheck_client_keyZcheck_nonce)r   r/   tsr   r   r   _check_mandatory_parameterst   s`   

z(BaseEndpoint._check_mandatory_parametersFc                 C   sD  |j tks|j tks|j tkrB| j|j|}|j tkr$t||}|S |j tkr1t	||}|S |j tkr>t
||}|S d}|S | j|j|}d }|jrf|r\| j|j|j|}n
| j|j|j|}|j tkrtt|||}|S |j tkrt|||}|S |j tkrt|||}|S |j tkrt|||}|S d}|S )NF)rA   r
   r   r   r   Zget_rsa_keyr=   r   Zverify_rsa_sha1Zverify_rsa_sha256Zverify_rsa_sha512Zget_client_secretr>   Zget_request_token_secretZget_access_token_secretr   Zverify_hmac_sha1r   Zverify_hmac_sha256r	   Zverify_hmac_sha512r   Zverify_plaintext)r   r/   Zis_token_requestZrsa_keyZvalid_signatureZclient_secretZresource_owner_secretr   r   r   _check_signature   sr   

1
/
-+



zBaseEndpoint._check_signaturer   )F)	__name__
__module____qualname__r   r3   rC   rF   rO   rP   r   r   r   r   r      s    
*(Br   )__doc__rM   Zoauthlib.commonr   r   r   r4   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s
   @	