
    $                     r    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e      Zy)	zoauthlib.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                   4    e Zd ZddZd Zd Zd Zd Zd	dZy)
BaseEndpointNc                 0    || _         |xs t        | _        y N)request_validatorr   token_generator)selfr   r   s      9lib/third_party/oauthlib/oauth1/rfc5849/endpoints/base.py__init__zBaseEndpoint.__init__   s    .D*<nD    c                    t        j                  |j                  dd      }t        j                  |j                  d      }t        j                  |j                  d      }g }|j                  |       |j                  |       |j                  |       t        t        d t        |t        j                  |      ft        |t        j                  |      ft        |t        j                  |      ff            }t        |      dkD  r9|D cg c]  }|d   	 }}t        j                  d	d
j!                  |      f      	 |d   \  }	}}
|	||
fS c c}w # t"        $ r t        j                  d      w xY w)zExtracts 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                     | d   S )Nr    )ss    r   <lambda>z=BaseEndpoint._get_signature_type_and_params.<locals>.<lambda>,   s    1r      r   zFoauth_ params must come from only 1 signaturetype but were found in %sz, description#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_paramsr#   found_typessignature_typeoauth_paramss              r   _get_signature_type_and_paramsz+BaseEndpoint._get_signature_type_and_params   s    004QM..\\5:K//##UDL F
MM- 
MM+
MM,(,~!;V!&!:!:=!I!K!4f!&!:!:;!G!I!5v!&!:!:<!H!J	 K 	L)M% ,-1#DE#DaQqT#DkE&&348IIk4JLM M=-N
.*nfl 6<// F  =&&;= ==s   E		E  E<c                    |xs i }d|v rt         |d   v rt        ||||      }nt        ||d|      }| j                  |      \  }}}t        t	        |            t        |      k7  rt        j                  d      t	        |      }|j                  d      |_        |j                  d      |_	        |j                  d      |_
        |j                  d      |_        |j                  d	      |_        |j                  d
      |_        |j                  d      |_        |j                  d      |_        t	        |      j                  d      |_        ||_        |D 	
cg c]  \  }	}
|	dk7  s|	|
f c}
}	|_        d|j&                  j                  dd      v r,|j$                  D 	
cg c]  \  }	}
|	dk7  s|	|
f c}
}	|_        |S c c}
}	w c c}
}	w )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realmAuthorization)r   r   r;   r.   dictr   r/   getr   
client_keyresource_owner_keynonce	timestampredirect_uriverifiersignature_methodrF   r:   r6   r   )r   urihttp_methodr   r   r2   r9   r6   r:   kvs              r   _create_requestzBaseEndpoint._create_requestB   s   mG'!$(??[$8g["g6g 	++G4 )NFL
 4#l"33&&3NOO%L$(():;G%))*>?G!-!1!1-!@G $$]3GM$(():;G'++,<=G#''(89G+//0HIGL$$W-GM'G *0JA18I3Iq!fJGN'//%%or::+2>>J>41aQ'\A>JgnN K Ks   $G2G.G<Gc                     | j                   j                  r>|j                  j                         j	                  d      st        j                         y y )Nzhttps://)r   enforce_sslrQ   lower
startswithr   InsecureTransportError)r   r2   s     r   _check_transport_securityz&BaseEndpoint._check_transport_securityh   sE    **KK**:6))++ 7 	+r   c                 \   t        |j                  |j                  |j                  |j                  |j
                  f      st        j                  d      |j
                  | j                  j                  vr;t        j                  d|j
                  d| j                  j                  d      d|j                  v r(|j                  d   dk7  rt        j                  d      t        |j                        d	k7  rt        j                  d
      	 t        |j                        }t        t        j                         |z
        | j                  j                   kD  r-t        j                  d| j                  j                   z        | j                  j%                  |j                        st        j                  d      | j                  j'                  |j                        st        j                  d      y # t"        $ r t        j                  d      w xY w)Nr(   r&   zInvalid signature, z not in .oauth_versionz1.0zInvalid OAuth version.
   zInvalid timestamp sizezCTimestamp given is invalid, differ from allowed by over %s seconds.zTimestamp must be an integer.zInvalid client key format.zInvalid nonce format.)allr   rJ   rL   rM   rP   r   r/   r   allowed_signature_methodsInvalidSignatureMethodErrorr:   r.   intabstimetimestamp_lifetime
ValueErrorcheck_client_keycheck_nonce)r   r2   tss      r   _check_mandatory_parametersz(BaseEndpoint._check_mandatory_parametersn   s    !!7#5#5w}}!!7#;#;= >&&;= = $$889..##!!;;=> > 	7///_-6&&3KLL
 7#&&3KLLGw  !b 
TYY[2	!7!7!J!J	J((700CCEG 	G !!2273E3EF&&3OPP!!--gmm<&&3JKK ='  7&&57 77s   H  H+c                 `   |j                   t        k(  r>| j                  j                  |j                  |      }t        j                  ||      }|S | j                  j                  |j                  |      }d }|j                  re|r2| j                  j                  |j                  |j                  |      }n1| j                  j                  |j                  |j                  |      }|j                   t        k(  rt        j                  |||      }|S t        j                  |||      }|S r   )rP   r
   r   get_rsa_keyrJ   r   verify_rsa_sha1get_client_secretrK   get_request_token_secretget_access_token_secretr	   verify_hmac_sha1verify_plaintext)r   r2   is_token_requestrsa_keyvalid_signatureclient_secretresource_owner_secrets          r   _check_signaturezBaseEndpoint._check_signature   s'   =0 &&2273E3EwOg!11'7Co4 # ,,>>


g'm"		#	#"&"8"8"Q"Q  '"<"<g#G
 #'"8"8"P"P  '"<"<g#G
 
	!	!^	3#44Wm5JL
  $44Wm5JLr   r   )F)	__name__
__module____qualname__r   r;   rU   r[   rk   ry   r"   r   r   r   r      s$    =(0T$L,;Lz r   r   )__doc__
__future__r   r   re   oauthlib.commonr   r   r=   r   r	   r
   r   r   r   r   r   r   objectr   r"   r   r   <module>r      s5   
 9  3@ @ @
y6 yr   