Ë
    ”Âiô  ã                   ó  — 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      úZ/var/www/timesheet/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ð
ˆð �:Š:Ø×Ñ °·
±
Ð ;Ô<Ø×ÒØ×ÑÐ!1°4×3DÑ3DÐ EÔFØ�=Š=Ø×ÑÐ!1°4·=±=Ð 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Ü% l°GÀ4Ç:Á:ÔN‰GØ× Ñ Ô$7Ò7Ü+¨w¯{©{¸>È2Ó/NÑNÜ-¨dÓ3Ò9°r�Ü0°¸|ÓL�Ü*F�˜Ò'Ø× Ñ Ô$8Ò8Ü+¨L¸#Ó>‰CäÐ@ÓAÐAØ�G˜TÐ!Ð!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à×,Ñ,¨U°IÓ>ˆñ �G—K‘K Ó/Ô3OÒOÜ$×.Ñ.¬w¯|©|¸DÓ/A×/HÑ/HÓ/JÓKˆOØ×ÑÐ!2°O×4JÑ4JÈ7Ó4SÐ TÔUà!Ÿ\™\¨#¨w¸¸lÓKÑˆˆW�dà×&Ñ& v¨s°G¸TÓBˆØ×ÑÐ.°Ð4Ô5à!Ÿ\™\¨#¨w¸¸lÓKÑˆˆW�dØ�G˜TÐ!Ð!r   c                 ó®  — t        |j                  dd«      «      }| j                  t        k(  rt        }n|st        |«      rt        }t        |v rBt        |d<   t        |t        «      r|j                  «       }| j                  ||||«      \  }}}n?| j                  r| j                  ||||«      \  }}}n| j                  |||d«      \  }}}d}|||fS )z¶Add 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   Ú
isinstanceÚbytesrV   r   r+   )r,   r3   r4   r0   r/   Úcontent_typeÚ_s          r   ÚpreparezClientAuth.prepare¡   sÐ   € ô ! §¡¨^¸RÓ!@ÓAˆØ×ÑÔ"5Ò5Ü7‰LÙ¤.°Ô"6Ü7ˆLä'¨<Ñ7Ü&BˆG�NÑ#Ü˜$¤Ô&Ø—{‘{“}�Ø!%§¡¨6°3¸ÀÓ!FÑˆC�™$Ø×$Ò$à!%§¡¨6°3¸ÀÓ!FÑˆC�™$ð #Ÿi™i¨°°W¸cÓB‰OˆC�˜!ØˆDØ�G˜TÐ!Ð!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Ø˜^ðÐð ñ+ó ð+ð( ØØØØØØ,Ø,ØØ ó5ò4#ò"ò "ò""óH"r   r   c                  ó   — t        «       S r    r   rb   r   r   rN   rN   ¼   s   € ÜÓÐr   c                  óN   — t        t        t        j                  «       «      «      S r    )rP   ÚintÚtimerb   r   r   rO   rO   À   s   € ÜŒs”4—9‘9“;ÓÓ Ð r   )rQ   rS   rf   Ú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   rb   r   r   ú<module>rn      sa   ðÛ Û Û å -Ý 2Ý .å 1Ý 'Ý 1Ý *Ý *Ý )Ý *Ý ,Ý +Ý %Ý %Ý $Ý "àBÐ Ø/Ð ÷^"ñ ^"òBó!r   