o
    ë6Wj-  ã                   @   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_PLAINTEXTÚSIGNATURE_RSA_SHA1ÚSIGNATURE_RSA_SHA256ÚSIGNATURE_RSA_SHA512Ú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   úu/home/esfera/Documents/content_generation/venv/lib/python3.10/site-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 )z†Extracts parameters from query, headers and body. Signature type
        is set to the source in which parameters were found.
        FT)ÚheadersÚexclude_oauth_signatureÚ
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>6   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   Úcollect_parametersr   r   r    ÚextendÚlistÚfilterr   r   Úfilter_oauth_paramsr   r   Úlenr   ÚInvalidRequestErrorÚjoinÚ
IndexError)
r   ÚrequestÚheader_paramsÚbody_paramsÚquery_paramsÚparamsÚ!signature_types_with_oauth_paramsÚ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 r�dd„ |jD ƒ|_|S )NzContent-TypeÚ zDuplicate OAuth1 entries.r&   Úoauth_signatureÚoauth_consumer_keyÚoauth_tokenÚoauth_nonceÚoauth_timestampÚoauth_callbackÚoauth_verifierÚoauth_signature_methodÚrealmc                 S   ó    g | ]\}}|d kr||f‘qS )r=   r   ©r$   ÚkÚvr   r   r   r%   c   s     z0BaseEndpoint._create_request.<locals>.<listcomp>ÚAuthorizationc                 S   rF   )rE   r   rG   r   r   r   r%   f   s    ÿ)r   r   r   r;   r.   Údictr   r/   Úgetr   Ú
client_keyÚresource_owner_keyÚnonceÚ	timestampÚredirect_uriÚverifierÚsignature_methodrE   r:   r6   r   )	r   ÚuriÚhttp_methodr   r   r2   r9   r6   r:   r   r   r   Ú_create_requestE   s6   ÿÿÿzBaseEndpoint._create_requestc                 C   s(   | j jr|j ¡  d¡st ¡ ‚d S d S )Nzhttps://)r   Úenforce_sslrT   ÚlowerÚ
startswithr   ÚInsecureTransportError)r   r2   r   r   r   Ú_check_transport_securityk   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¡sŒtjdd�‚d S )Nr(   r&   z"Invalid signature, {} not in {!r}.Ú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   rM   rO   rP   rS   r   r/   r   Úallowed_signature_methodsÚInvalidSignatureMethodErrorÚformatr:   r.   ÚintÚ
ValueErrorÚabsÚtimeÚtimestamp_lifetimeÚcheck_client_keyÚcheck_nonce)r   r2   Útsr   r   r   Ú_check_mandatory_parametersq   sZ   
þÿþÿ
ÿÿÿÿþÿÿÿÿz(BaseEndpoint._check_mandatory_parametersFc                 C   s6  |j ttthv r;| j |j|¡}|j tkrt ||¡}|S |j tkr*t 	||¡}|S |j tkr7t 
||¡}|S d}|S | j |j|¡}d }|jr_|rU| j |j|j|¡}n
| j |j|j|¡}|j tkrmt |||¡}|S |j tkr{t |||¡}|S |j tkr‰t |||¡}|S |j tkr—t |||¡}|S d}|S )NF)rS   r   r   r   r   Úget_rsa_keyrM   r   Úverify_rsa_sha1Úverify_rsa_sha256Úverify_rsa_sha512Úget_client_secretrN   Úget_request_token_secretÚget_access_token_secretr   Úverify_hmac_sha1r   Úverify_hmac_sha256r	   Úverify_hmac_sha512r
   Úverify_plaintext)r   r2   Úis_token_requestÚrsa_keyÚvalid_signatureÚclient_secretÚresource_owner_secretr   r   r   Ú_check_signature²   sj   ÿ
1
Ð/
Ò-Õ+áÿþÿþÿ
ÿ
ôÿ
÷ÿ
úÿþzBaseEndpoint._check_signaturer   )F)	Ú__name__Ú
__module__Ú__qualname__r   r;   rV   r[   rj   r{   r   r   r   r   r      s    
*&Ar   )Ú__doc__re   Úoauthlib.commonr   r   r   r<   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   s
   @