
    k7i                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  SSK	J
r
  SSK	Jr  SSK	Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SrSr " S S5      rS rS rg)    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            
       p    \ rS rSr\\\\\\	0r
\S 5       rSSSSSS\\SS4
S jrS rS rS rS	 rS
 rSrg)
ClientAuth   c                      X R                   U'   g)ay  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      \/home/james-whalen/.local/lib/python3.13/site-packages/authlib/oauth1/rfc5849/client_auth.pyregister_signature_method$ClientAuth.register_signature_method"   s      '+d#    NFc                     Xl         X l        X0l        X@l        XPl        Xl        Xl        X`l        Xpl        Xl	        Xl
        g 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__ClientAuth.__init__4   sA     #*
(( 0, 
"4r    c                     U R                   R                  U R                  5      nU(       d  [        S5      e[	        XXCS9nU" X5      $ )aH  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urir3   r2   r   requests          r   get_oauth_signatureClientAuth.get_oauth_signatureN   sF     %%))$*?*?@899$HD""r    c                 `   SU4SU4SSU R                   4SU R                  4/nU R                  (       a  UR                  SU R                  45        U R                  (       a  UR                  SU R                  45        U R
                  (       a  UR                  SU R
                  45        U$ )	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_paramsClientAuth.get_oauth_params_   s    E"	*$%t'<'<=!4>>2
 ::

 ;<!143D3D EF==!14== ABr    c                 `   U R                   [        :X  a  [        XBU R                  S9nOU R                   [        :X  aC  [
        UR                  SS5      ;   a(  [        U5      =(       d    / n[        XE5      n[
        US'   O+U R                   [        :X  a  [        XA5      nO[        S5      eXU4$ )N)r,   Content-Type z!Unknown signature type specified.)r)   r   r	   r,   r   CONTENT_TYPE_FORM_URLENCODEDr4   r   r   r   r
   r5   )r.   r7   r3   r2   rG   decoded_bodys         r   _renderClientAuth._rendero   s    "77%l4::NG  $77+w{{>2/NN-d39r0L*F'  $88+L>C@AAT!!r    c                    [        5       n[        5       nUc  Sn[        U5      nUc  0 nU R                  XV5      nU(       as  UR	                  S5      [
        :w  aZ  [        R                  " [        R                  " U5      R                  5       5      nUR                  SUR                  S5      45        U R                  X#XG5      u  p#nU R                  XX45      n	UR                  SU	45        U R                  X#XG5      u  p#nX#U4$ )a  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    rK   oauth_body_hashzutf-8oauth_signature)generate_noncegenerate_timestampstrrH   r4   rM   base64	b64encodehashlibsha1digestrD   decoderO   r9   )
r.   r6   r7   r3   r2   rE   rF   rG   rR   sigs
             r   r   ClientAuth.sign}   s      &(	<D 	N	?G,,U> GKK/3OO$..w||D/A/H/H/JKO!2O4J4J74S TU!\\#Kd&&vGB.45!\\#KdT!!r    c                    [        UR                  SS5      5      nU R                  [        :X  a  [        nOU(       d  [        U5      (       a  [        n[        U;   a  [        US'   U R                  XX45      u  p#nO?U R                  (       a  U R                  XX45      u  p#nOU R                  XUS5      u  p#nSnX#U4$ )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.
rK   rL   r    )r   r4   r)   r   rM   r   r   r-   )r.   r6   r7   r3   r2   content_type_s          r   prepareClientAuth.prepare   s     !^R!@A"557L."6"67L'<7&BGN#!%6!FC$$$!%6!FC$ #iiWcBOC!DT!!r    )r#   r$   r-   r,   r'   r*   r(   r)   r%   r&   r+   )__name__
__module____qualname____firstlineno__r   r   r   r   r   r   r   classmethodr   r   r/   r9   rH   rO   r   rb   __static_attributes__ r    r   r   r      sl    ^M^ + +( ,, 54#" """H"r    r   c                      [        5       $ r"   r   rj   r    r   rT   rT      s    r    c                  P    [        [        [        R                  " 5       5      5      $ r"   )rV   inttimerj   r    r   rU   rU      s    s499;  r    )rW   rY   rn   authlib.common.encodingr   authlib.common.securityr   authlib.common.urlsr   
parametersr   r	   r
   	signaturer   r   r   r   r   r   r   r   r   wrapperr   rM   CONTENT_TYPE_MULTI_PARTr   rT   rU   rj   r    r   <module>rv      sa       - 2 . 1 ' 1 * * ) * , + % % $ "B / \" \"~!r    