B
    `                 @   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   U/home/dcms/DCMS/lib/python3.7/site-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 )N)r   )r   r   r   r   	available)   s    zBaseEndpoint.availablec             C   s
   || _ d S )N)r   )r   r   r   r   r   r   -   s    c             C   s   | j S )N)r   )r   r   r   r   catch_errors1   s    zBaseEndpoint.catch_errorsc             C   s
   || _ d S )N)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.)request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_id)r   r   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   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 %s)r   r   )r   
ValueErrorhttp_methodr   r	   )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
        POST z$URL query parameters are not allowed)r   r   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'   r*   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ry | |f||S  tk
rT    Y q tk
rh    Y q tk
r } z t	 }t
d|  i |jdf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!   infojsonr   r   r   	Exceptionr   warning)Zendpointuriargskwargseerror)fr   r   wrapper`   s"    
z0catch_errors_and_unavailability.<locals>.wrapper)	functoolswraps)r9   r:   r   )r9   r   catch_errors_and_unavailability_   s    r=   )__doc__
__future__r   r   r;   loggingerrorsr   r   r   r   r	   r
   r   Zoauthlib.commonr   r   	getLoggerr+   r!   objectr   r=   r   r   r   r   <module>   s   $
H