
    }Wh+                         d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ  G d	 d
e          Z	 	 	 	 	 	 	 ddZd ZddZddZddZd Zd Z G d d          Z G d de          ZdS )z
oauthlib.oauth2.rfc6749.tokens
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module contains methods for adding two types of access tokens to requests.

- Bearer https://tools.ietf.org/html/rfc6750
- MAC https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01
    N)
b2a_base64)urlparse)common)add_params_to_qsadd_params_to_uri   )utilsc                        e Zd Zd
 fd	Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed	             Z xZS )OAuth2TokenNc                 p   t                                          |           d | _        |                    d          r,t	          t          j        |d                             | _        |=t	          t          j        |                    | _        | j        | j        | _        d S d S | j        | _        d S )Nscope)super__init__
_new_scopegetsetr	   scope_to_list
_old_scope)selfparams	old_scope	__class__s      d/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/oauthlib/oauth2/rfc6749/tokens.pyr   zOAuth2Token.__init__   s       ::g 	H!%"5fWo"F"FGGDO !%"5i"@"@AADO& #'/ '&
 #oDOOO    c                 "    | j         | j        k    S N)r   r   r   s    r   scope_changedzOAuth2Token.scope_changed&   s    $/11r   c                 4    t          j        | j                  S r   )r	   list_to_scoper   r   s    r   r   zOAuth2Token.old_scope*       "4?333r   c                 *    t          | j                  S r   )listr   r   s    r   
old_scopeszOAuth2Token.old_scopes.       DO$$$r   c                 4    t          j        | j                  S r   )r	   r    r   r   s    r   r   zOAuth2Token.scope2   r!   r   c                 *    t          | j                  S r   )r#   r   r   s    r   scopeszOAuth2Token.scopes6   r%   r   c                 :    t          | j        | j        z
            S r   )r#   r   r   r   s    r   missing_scopeszOAuth2Token.missing_scopes:       DOdo5666r   c                 :    t          | j        | j        z
            S r   )r#   r   r   r   s    r   additional_scopeszOAuth2Token.additional_scopes>   r+   r   r   )__name__
__module____qualname__r   propertyr   r   r$   r   r(   r*   r-   __classcell__)r   s   @r   r   r      s        . . . . . . 2 2 X2 4 4 X4 % % X% 4 4 X4 % % X% 7 7 X7 7 7 X7 7 7 7 7r   r    
hmac-sha-1c                 j   |                                 }t          j        |          \  }}|                                dk    rt          j        }n4|                                dk    rt          j        }nt          d          |
dk    r<|p8d                    t          j	        |	          t          j                              }n&t          j                    }t          j                    }t          |          \  }}}}}}|r|dz   |z   n|}|a|
dk    r[|                    d          }t           ||                                                    dd	                             d          }nd
}g }|
dk    r|                    |           n*|                    |           |                    |           |                    |                                            |                    |           |                    |           |                    |           |
dk    r|                    |           |                    |pd
           d                    |          dz   }t)          |t*                    r|                    d          }t-          j        ||                    d          |          }t          |                                          dd	                             d          }g }|                    d| z             |
dk    r|                    d|z             |                    d|z             |r|                    d|z             |r|                    d|z             |                    d|z             |pi }d                    |          |d<   |S )a_  Add an `MAC Access Authentication`_ signature to headers.

    Unlike OAuth 1, this HMAC signature does not require inclusion of the
    request payload/body, neither does it use a combination of client_secret
    and token_secret but rather a mac_key provided together with the access
    token.

    Currently two algorithms are supported, "hmac-sha-1" and "hmac-sha-256",
    `extension algorithms`_ are not supported.

    Example MAC Authorization header, linebreaks added for clarity

    Authorization: MAC id="h480djs93hd8",
                       nonce="1336363200:dj83hs9s",
                       mac="bhCQXTVyfj5cmA9uKkPFx1zeOXM="

    .. _`MAC Access Authentication`: https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01
    .. _`extension algorithms`: https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01#section-7.1

    :param token:
    :param uri: Request URI.
    :param key: MAC given provided by token endpoint.
    :param http_method: HTTP Request method.
    :param nonce:
    :param headers: Request headers as a dictionary.
    :param body:
    :param ext:
    :param hash_algorithm: HMAC algorithm provided by token endpoint.
    :param issue_time: Time when the MAC credentials were issued (datetime).
    :param draft: MAC authentication specification version.
    :return: headers dictionary with the authorization field added.
    r4   zhmac-sha-256zunknown hash algorithmr   z{}:{}?Nzutf-8r3   
zMAC id="%s"zts="%s"z
nonce="%s"zbodyhash="%s"zext="%s"zmac="%s"z, Authorization)upperr	   host_from_urilowerhashlibsha1sha256
ValueErrorformatgenerate_ager   generate_noncegenerate_timestampr   encoder   digestdecodeappendjoin
isinstancestrhmacnew)tokenurikeyhttp_methodnonceheadersbodyexthash_algorithm
issue_timedrafthostporthtsschnetpathparqueryfrarequest_uribodyhashbasebase_stringsignheaders                              r   prepare_mac_headerri   C   s   P ##%%K$S))JD$--L					>	1	1N1222zz C(::(F(F*0*?*A*AC C &((%''&.smm#CdC(-7$*u$$4K EQJJ{{7##aaggnn..//4;;GDD DzzEBEKK!!##$$$KKKKKKzzHKK	r))D//D(K #s "jj!!8C++G44a88Ddkkmm$$SbS)0099DF
MM-%'(((zzi"n%%%
MM,&''' 2o0111
 (j3&'''
MM*t#$$$mG#yy00GONr   c                 (    t          |d| fg          S )a  Add a `Bearer Token`_ to the request URI.
    Not recommended, use only if client can't use authorization header or body.

    http://www.example.com/path?access_token=h480djs93hd8

    .. _`Bearer Token`: https://tools.ietf.org/html/rfc6750

    :param token:
    :param uri:
    access_token)r   )rN   rO   s     r   prepare_bearer_urirl      s     S^U$;"=>>>r   c                     |pi }d| z  |d<   |S )zAdd a `Bearer Token`_ to the request URI.
    Recommended method of passing bearer tokens.

    Authorization: Bearer h480djs93hd8

    .. _`Bearer Token`: https://tools.ietf.org/html/rfc6750

    :param token:
    :param headers:
    z	Bearer %sr9    )rN   rS   s     r   prepare_bearer_headersro      s!     mG*U2GONr   c                 (    t          |d| fg          S )zAdd a `Bearer Token`_ to the request body.

    access_token=h480djs93hd8

    .. _`Bearer Token`: https://tools.ietf.org/html/rfc6750

    :param token:
    :param body:
    rk   )r   )rN   rT   s     r   prepare_bearer_bodyrq      s     D^U$;"=>>>r   Fc                 (    t          j                    S )zp
    :param request: OAuthlib request.
    :type request: oauthlib.common.Request
    :param refresh_token:
    )r   generate_token)requestrefresh_tokens     r   random_token_generatorrv      s      """r   c                       fd}|S )z
    :param private_pem:
    c                 <    | _         t          j        |           S r   )claimsr   generate_signed_token)rt   kwargsprivate_pems    r   signed_token_generatorz6signed_token_generator.<locals>.signed_token_generator   s    +KAAAr   rn   )r|   r{   r}   s   `` r   r}   r}      s0    B B B B B B "!r   c                     d}d| j         v rf| j                             d                                          }t          |          dk    r&|d                                         dk    r|d         }n| j        }|S )z
    Helper function to extract a token from the request header.

    :param request: OAuthlib request.
    :type request: oauthlib.common.Request
    :return: Return the token or None if the Authorization header is malformed.
    Nr9      r   bearerr   )rS   r   splitlenr<   rk   )rt   rN   split_headers      r   get_token_from_headerr      s{     E'/))**?;;AACC|!!l1o&;&;&=&=&I&I OE$Lr   c                   &    e Zd ZdZddZd Zd ZdS )	TokenBasern   Fc                      t          d          )N&Subclasses must implement this method.NotImplementedError)r   rt   ru   s      r   __call__zTokenBase.__call__  s    !"JKKKr   c                      t          d          b
        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        r   r   r   rt   s     r   validate_requestzTokenBase.validate_request      
 ""JKKKr   c                      t          d          r   r   r   s     r   estimate_typezTokenBase.estimate_type  r   r   NF)r.   r/   r0   	__slots__r   r   r   rn   r   r   r   r      sW        IL L L LL L LL L L L Lr   r   c                   2    e Zd ZdZ	 	 ddZd	dZd Zd ZdS )
BearerToken)request_validatortoken_generatorrefresh_token_generator
expires_inNc                 ^    || _         |pt          | _        |p| j        | _        |pd| _        d S )Ni  )r   rv   r   r   r   )r   r   r   r   r   s        r   r   zBearerToken.__init__  s=    !2.H2H#;t'; 	$ %,r   Fc                    d|v rt          j        dt                     t          | j                  r|                     |          n| j        }||_        |                     |          |dd}|j        d                    |j                  |d<   |rD|j        r%| j	        
                    |          s|j        |d<   n|                     |          |d<   |                    |j        pi            t          |          S )	z
        Create a BearerToken, by default without refresh token.

        :param request: OAuthlib request.
        :type request: oauthlib.common.Request
        :param refresh_token:
        
save_tokenzx`save_token` has been deprecated, it was not called internally.If you do, call `request_validator.save_token()` instead.Bearer)rk   r   
token_typeN r   ru   )warningswarnDeprecationWarningcallabler   r   r(   rI   ru   r   rotate_refresh_tokenr   updateextra_credentialsr   )r   rt   ru   r{   r   rN   s         r   create_tokenzBearerToken.create_token$  s$    6!!M V,. . . 2:$/1J1J_T__W---PTP_
' !0099$"
 
 >% XXgn55E'N 	O% O.CCGLLO)0)>o&&)-)E)Eg)N)No&W.4"5555!!!r   c                 b    t          |          }| j                            ||j        |          S )r   )r   r   validate_bearer_tokenr(   )r   rt   rN   s      r   r   zBearerToken.validate_requestK  s5    
 &g..%;;7>7, , 	,r   c                     |j                             dd                              d          d                                         dk    rdS |j        dS dS )	r   r9   r3   r   r   r   	   N   )rS   r   r   r<   rk   r   s     r   r   zBearerToken.estimate_typeT  sX    
 ?3399#>>qAGGIIXUU1!-11r   )NNNNr   )r.   r/   r0   r   r   r   r   r   rn   r   r   r   r     sl        I
 @D:>- - - -%" %" %" %"N, , ,
 
 
 
 
r   r   )NNNr3   r4   Nr   r   )r3   r   )__doc__r=   rL   r   binasciir   urllib.parser   oauthlibr   oauthlib.commonr   r   r3   r	   dictr   ri   rl   ro   rq   rv   r}   r   r   r   rn   r   r   <module>r      s             ! ! ! ! ! !       ? ? ? ? ? ? ? ?      *7 *7 *7 *7 *7$ *7 *7 *7\ "# &2"&g g g gT? ? ?    
? 
? 
? 
?# # # #" " "  (L L L L L L L L*I I I I I) I I I I Ir   