
                         r    d Z ddlmZmZ ddlZddlmZ ddlmZ  ej                  e
      Z G d d	e      Zy)
zoauthlib.oauth1.rfc5849.endpoints.resource ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module is an implementation of the resource protection provider logic of
OAuth 1.0 RFC 5849.
    )absolute_importunicode_literalsN   )errors   )BaseEndpointc                        e Zd ZdZ	 	 	 	 ddZy)ResourceEndpointa%  An endpoint responsible for protecting resources.

    Typical use is to instantiate with a request validator and invoke the
    ``validate_protected_resource_request`` in a decorator around a view
    function. If the request is valid, invoke and return the response of the
    view. If invalid create and return an error response directly from the
    decorator.

    See :doc:`/oauth1/validator` for details on which validator methods to
    implement
    for this endpoint.

    An example decorator::

        from functools import wraps
        from your_validator import your_validator
        from oauthlib.oauth1 import ResourceEndpoint
        endpoint = ResourceEndpoint(your_validator)

        def require_oauth(realms=None):
            def decorator(f):
                @wraps(f)
                def wrapper(request, *args, **kwargs):
                    v, r = provider.validate_protected_resource_request(
                            request.url,
                            http_method=request.method,
                            body=request.data,
                            headers=request.headers,
                            realms=realms or [])
                    if v:
                        return f(*args, **kwargs)
                    else:
                        return abort(403)
    Nc                 $   	 | j                  ||||      }	 | j                  |       | j	                  |       |j
                  sd|fS | j                  j                  |j
                        sd|fS | j                  j                  |j                  |j                  |j                  ||j
                        sd|fS | j                  j                  |j                  |      }|s| j                  j                  |_	        | j                  j                  |j                  |j
                  |      }|s| j                  j                  |_        | j                  j!                  |j                  |j
                  ||j"                  |      }	| j%                  |      }
||j&                  d<   ||j&                  d<   |	|j&                  d<   |
|j&                  d<   t)        |||	|
f      }|smt*        j-                  d	       t*        j-                  d
|       t*        j-                  d|       t*        j-                  d|	       t*        j-                  d|
       ||fS # t        j                  $ r Y yw xY w# t        j                  $ r d|fcY S w xY w)a  Create a request token response, with a new request token if valid.

        :param uri: The full URI of the token request.
        :param http_method: A valid HTTP verb, i.e. GET, POST, PUT, HEAD, etc.
        :param body: The request body as a string.
        :param headers: The request headers as a dict.
        :param realms: A list of realms the resource is protected under.
                       This will be supplied to the ``validate_realms``
                       method of the request validator.
        :returns: A tuple of 2 elements.
                  1. True if valid, False otherwise.
                  2. An oauthlib.common.Request object.
        )FNF)access_token)urirealmsclientresource_ownerrealm	signaturez&[Failure] request verification failed.zValid client: %szValid token: %szValid realm: %szValid signature: %s)_create_requestr   OAuth1Error_check_transport_security_check_mandatory_parametersresource_owner_keyrequest_validatorcheck_access_tokenvalidate_timestamp_and_nonce
client_key	timestampnoncevalidate_client_keydummy_clientvalidate_access_tokendummy_access_tokenvalidate_realmsr   _check_signaturevalidator_logallloginfo)selfr   http_methodbodyheadersr   requestvalid_clientvalid_resource_ownervalid_realmvalid_signaturevs               =lib/third_party/oauthlib/oauth1/rfc5849/endpoints/resource.py#validate_protected_resource_requestz4ResourceEndpoint.validate_protected_resource_request5   s{   &$$S+tWEg
$$W-
&&w/ %%G^!!44""$G^!!>>// ? 1 G^ ))==G%L11>>g  11GGG66A#'#9#9#L#Lg 0 ((88""KK 9 K ++G4O '3G(#.BG*+%0G'")8G+& 	\/oNOA	hh78	hh!<0	hh "67	hh +.	hh$o6g:E    G^s"   I "I5 I21I25JJ)GETNNN)__name__
__module____qualname____doc__r3        r2   r
   r
      s    !J 7</32615wr:   r
   )r8   
__future__r   r   logging r   baser   	getLoggerr5   r&   r
   r9   r:   r2   <module>r@      s8   
 9   g![| [r:   