U
    I]                     @   s~   d Z ddlmZmZ ddlZddlZddlmZmZm	Z	m
Z
mZmZmZ ddlmZmZ eeZG dd deZd	d
 ZdS )z
oauthlib.oauth2.rfc6749
~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of various logic needed
for consuming and providing OAuth 2.0 RFC6749.
    )absolute_importunicode_literalsN   )FatalClientErrorOAuth2ErrorServerErrorTemporarilyUnavailableErrorInvalidRequestErrorInvalidClientErrorUnsupportedTokenTypeError)CaseInsensitiveDict	urldecodec                   @   s   e Zd Zdd Zedd Zejdd Zedd Zejdd Zed	d
 Zejdd
 Zdd Z	dd Z
dd Zdd Zdd ZdS )BaseEndpointc                 C   s   d| _ d| _d | _d S )NTF)
_available_catch_errors_valid_request_methodsself r   H/usr/lib/python3/dist-packages/oauthlib/oauth2/rfc6749/endpoints/base.py__init__   s    zBaseEndpoint.__init__c                 C   s   | j S Nr   r   r   r   r   valid_request_methods   s    z"BaseEndpoint.valid_request_methodsc                 C   s    |d k	rdd |D }|| _ d S )Nc                 S   s   g | ]}|  qS r   )upper).0xr   r   r   
<listcomp>%   s     z6BaseEndpoint.valid_request_methods.<locals>.<listcomp>r   )r   r   r   r   r   r   "   s    c                 C   s   | j S r   r   r   r   r   r   	available)   s    zBaseEndpoint.availablec                 C   s
   || _ d S r   r   )r   r   r   r   r   r   -   s    c                 C   s   | j S r   r   r   r   r   r   catch_errors1   s    zBaseEndpoint.catch_errorsc                 C   s
   || _ d S r   r    )r   r!   r   r   r   r!   5   s    c                 C   s   |j st|dddS )zRaise error on missing token.zMissing token parameter.requestZdescriptionN)tokenr	   r   r#   r   r   r   _raise_on_missing_token9   s    z$BaseEndpoint._raise_on_missing_tokenc                 C   sZ   | j |r0| j |sVtd| t|dn&| j |j|sVtd| t|ddS )z&Raise on failed client authentication.z!Client authentication failed, %r.r#   N)Zrequest_validatorZclient_authentication_requiredZauthenticate_clientlogdebugr
   Zauthenticate_client_idZ	client_idr%   r   r   r   _raise_on_invalid_client>   s    z%BaseEndpoint._raise_on_invalid_clientc                 C   s,   |j r(|j | jkr(|j | jkr(t|ddS )zRaise on unsupported tokens.r'   N)Ztoken_type_hintZvalid_token_typesZsupported_token_typesr   r%   r   r   r   _raise_on_unsupported_tokenH   s    

z(BaseEndpoint._raise_on_unsupported_tokenc                 C   s<   | j d krtd|j | j kr8t|d|j  dd S )Nz0Configure "valid_request_methods" property firstzUnsupported request method %sr"   )r   
ValueErrorhttp_methodr   r	   r%   r   r   r   _raise_on_bad_methodO   s    
z!BaseEndpoint._raise_on_bad_methodc                 C   s,   |j  dkr(|jpd}|r(t|dddS )z/Raise if invalid POST request received
        ZPOST z$URL query parameters are not allowedr"   N)r-   r   Z	uri_queryr	   )r   r#   Zquery_paramsr   r   r   _raise_on_bad_post_requestV   s    
z'BaseEndpoint._raise_on_bad_post_requestN)__name__
__module____qualname__r   propertyr   setterr   r!   r&   r*   r+   r.   r0   r   r   r   r   r      s$   






r   c                    s   t   fdd}|S )Nc              
      s   | j s&t }td|  i |jdfS | jrz | |f||W S  tk
rV    Y q tk
rj    Y q tk
r } z(t	 }t
d|  i |jdf W Y S d }~X Y qX n | |f||S d S )Nz*Endpoint unavailable, ignoring request %s.i  z.Exception caught while processing request, %s.i  )r   r   r(   infoZjsonr!   r   r   	Exceptionr   Zwarning)ZendpointZuriargskwargseerrorfr   r   wrapper`   s$    $z0catch_errors_and_unavailability.<locals>.wrapper)	functoolswraps)r=   r>   r   r<   r   catch_errors_and_unavailability_   s    rA   )__doc__Z
__future__r   r   r?   Zloggingerrorsr   r   r   r   r	   r
   r   Zoauthlib.commonr   r   Z	getLoggerr1   r(   objectr   rA   r   r   r   r   <module>   s   $
H