
    ~h                        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
 ddl	mZ ddl	mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dZdZ G d d      Zd Zd Zy)    N)	to_nativegenerate_token)extract_params   )prepare_form_encoded_body)prepare_headers)prepare_request_uri_query)SIGNATURE_HMAC_SHA1)SIGNATURE_PLAINTEXT)SIGNATURE_RSA_SHA1)SIGNATURE_TYPE_BODY)SIGNATURE_TYPE_HEADER)SIGNATURE_TYPE_QUERY)sign_hmac_sha1)sign_plaintext)sign_rsa_sha1)OAuth1Requestz!application/x-www-form-urlencodedzmultipart/form-datac            
       f    e Zd ZeeeeeeiZ	e
d        Zddddddeeddf
dZd Zd Zd Zd Zd	 Zy)

ClientAuthc                 "    || j                   |<   y)a  Extend client signature methods.

        :param name: A string to represent signature method.
        :param sign: A function to generate signature.

        The ``sign`` method accept 2 parameters::

            def custom_sign_method(client, request):
                # client is the instance of Client.
                return "your-signed-string"


            Client.register_signature_method("custom-name", custom_sign_method)
        N)SIGNATURE_METHODS)clsnamesigns      ^/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/oauth1/rfc5849/client_auth.pyregister_signature_methodz$ClientAuth.register_signature_method"   s      '+d#    NFc                     || _         || _        || _        || _        || _        || _        |	| _        || _        || _        |
| _	        || _
        y N)	client_idclient_secrettokentoken_secretredirect_urisignature_methodsignature_typersa_keyverifierrealmforce_include_body)selfr!   r"   r#   r$   r%   r(   r)   r&   r'   r*   r+   s               r   __init__zClientAuth.__init__4   sW     #*
(( 0, 
"4r   c                     | j                   j                  | j                        }|st        d      t	        ||||      } || |      S )ax  Get an OAuth signature to be used in signing a request.

        To satisfy `section 3.4.1.2`_ item 2, if the request argument's
        headers dict attribute contains a Host item, its value will
        replace any netloc part of the request argument's uri attribute
        value.

        .. _`section 3.4.1.2`: https://tools.ietf.org/html/rfc5849#section-3.4.1.2
        zInvalid signature method.)bodyheaders)r   getr&   
ValueErrorr   )r,   methodurir0   r/   r   requests          r   get_oauth_signaturezClientAuth.get_oauth_signatureN   sL     %%))$*?*?@899$HD'""r   c                 B   d|fd|fdd| j                   fd| j                  fg}| j                  r|j                  d| j                  f       | j                  r|j                  d| j                  f       | j
                  r|j                  d| j
                  f       |S )	Noauth_nonceoauth_timestamp)oauth_versionz1.0oauth_signature_methodoauth_consumer_keyoauth_tokenoauth_callbackoauth_verifier)r&   r!   r#   appendr%   r)   )r,   nonce	timestampoauth_paramss       r   get_oauth_paramszClientAuth.get_oauth_params_   s    E"	*$%t'<'<=!4>>2
 ::

 ;<!143D3D EF==!14== ABr   c                 Z   | j                   t        k(  rt        ||| j                        }n{| j                   t        k(  r=t
        |j                  dd      v rPt        |      xs g }t        ||      }t
        |d<   n+| j                   t        k(  rt        ||      }nt        d      |||fS )N)r*   Content-Type z!Unknown signature type specified.)r'   r   r	   r*   r   CONTENT_TYPE_FORM_URLENCODEDr1   r   r   r   r
   r2   )r,   r4   r0   r/   rC   decoded_bodys         r   _renderzClientAuth._rendero   s    "77%lG4::NG  $77+w{{>2/NN-d39r0|L*F'  $88+L#>C@AAGT!!r   c                    t               }t               }|d}t        |      }|i }| j                  ||      }|rp|j	                  d      t
        k7  rXt        j                  t        j                  |      j                               }|j                  d|j                  d      f       | j                  ||||      \  }}}| j                  ||||      }	|j                  d|	f       | j                  ||||      \  }}}|||fS )a5  Sign the HTTP request, add OAuth parameters and signature.

        :param method: HTTP method of the request.
        :param uri:  URI of the HTTP request.
        :param body: Body payload of the HTTP request.
        :param headers: Headers of the HTTP request.
        :return: uri, headers, body
        r   rF   oauth_body_hashzutf-8oauth_signature)generate_noncegenerate_timestampstrrD   r1   rH   base64	b64encodehashlibsha1digestr@   decoderJ   r6   )
r,   r3   r4   r0   r/   rA   rB   rC   rL   sigs
             r   r   zClientAuth.sign}   s	     &(	<D 	N	?G,,UI> GKK/3OO$..w||D/A/H/H/JKO!2O4J4J74S TU!\\#wlKWd&&vsGTB.45!\\#wlKWdGT!!r   c                 n   t        |j                  dd            }| j                  t        k(  rt        }n|st        |      rt        }t        |v r"t        |d<   | j                  ||||      \  }}}n?| j                  r| j                  ||||      \  }}}n| j                  |||d      \  }}}d}|||fS )zAdd OAuth parameters to the request.

        Parameters may be included from the body if the content-type is
        urlencoded, if no content type is set, a guess is made.
        rF   rG   r   )r   r1   r'   r   rH   r   r   r+   )r,   r3   r4   r0   r/   content_type_s          r   preparezClientAuth.prepare   s     !^R!@A"557L."67L'<7&BGN#!%63!FC$$$!%63!FC$ #iiWcBOC!DGT!!r   )__name__
__module____qualname__r   r   r   r   r   r   r   classmethodr   r   r-   r6   rD   rJ   r   r[    r   r   r   r      sl    ^M^ + +( ,, 54#" """H"r   r   c                      t               S r    r   r`   r   r   rN   rN      s    r   c                  N    t        t        t        j                                     S r    )rP   inttimer`   r   r   rO   rO      s    s499;  r   )rQ   rS   rd   authlib.common.encodingr   authlib.common.securityr   authlib.common.urlsr   
parametersr   r	   r
   	signaturer   r   r   r   r   r   r   r   r   wrapperr   rH   CONTENT_TYPE_MULTI_PARTr   rN   rO   r`   r   r   <module>rl      sa       - 2 . 1 ' 1 * * ) * , + % % $ "B / \" \"~!r   