o
    y¨Êh­)  ã                   @   st   d Z ddlmZm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 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)ÚCaseInsensitiveDictÚRequestÚgenerate_tokené   )
ÚCONTENT_TYPE_FORM_URLENCODEDÚSIGNATURE_HMAC_SHA1ÚSIGNATURE_HMAC_SHA256Ú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   úX/var/www/html/env/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>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   ú#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#   d   s     z0BaseEndpoint._create_request.<locals>.<listcomp>ÚAuthorizationc                 S   rD   )rC   r   rE   r   r   r   r#   g   s    ÿ)r   r   r   r9   r,   Údictr   r-   Úgetr   Ú
client_keyÚresource_owner_keyÚnonceÚ	timestampÚredirect_uriÚverifierÚsignature_methodrC   r8   r4   r   )	r   ÚuriÚhttp_methodr   r   r0   r7   r4   r8   r   r   r   Ú_create_requestD   s8   ÿÿÿzBaseEndpoint._create_requestc                 C   s(   | j jr|j ¡  d¡st ¡ ‚d S d S )Nzhttps://)r   Úenforce_sslrR   ÚlowerÚ
startswithr   ÚInsecureTransportError)r   r0   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	vr(tj
d|j| jj	f 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, %s 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   rK   rM   rN   rQ   r   r-   r   Úallowed_signature_methodsÚInvalidSignatureMethodErrorr8   r,   ÚintÚ
ValueErrorÚabsÚtimeÚtimestamp_lifetimeÚcheck_client_keyÚcheck_nonce)r   r0   Útsr   r   r   Ú_check_mandatory_parametersr   s^   
þÿÿþÿ
ÿÿÿÿþÿÿÿÿz(BaseEndpoint._check_mandatory_parametersFc                 C   s¼   |j tkr| j |j|¡}t ||¡}|S | j |j|¡}d }|jr9|r/| j 	|j|j|¡}n
| j 
|j|j|¡}|j tkrGt |||¡}|S |j tkrUt |||¡}|S t |||¡}|S r   )rQ   r   r   Úget_rsa_keyrK   r   Úverify_rsa_sha1Úget_client_secretrL   Úget_request_token_secretÚget_access_token_secretr	   Úverify_hmac_sha1r
   Úverify_hmac_sha256Úverify_plaintext)r   r0   Úis_token_requestÚrsa_keyÚvalid_signatureÚclient_secretÚresource_owner_secretr   r   r   Ú_check_signature´   s@   
ÿìÿ
ÿ
ÿ
ÿ
úÿþÿzBaseEndpoint._check_signaturer   )F)	Ú__name__Ú
__module__Ú__qualname__r   r9   rT   rY   rg   ru   r   r   r   r   r      s    
*(Br   )Ú__doc__Ú
__future__r   r   rb   Úoauthlib.commonr   r   r   r:   r   r	   r
   r   r   r   r   r   r   r   Úobjectr   r   r   r   r   Ú<module>   s   0