§
    ZŠtj+  ã                   óô   — 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      €ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/oauthlib/oauth2/rfc6749/tokens.pyr   zOAuth2Token.__init__   s£   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØ�:Š:�gÑÔð 	HÝ!¥%Ô"5°f¸W´oÑ"FÔ"FÑGÔGˆDŒOØÐ Ý!¥%Ô"5°iÑ"@Ô"@ÑAÔAˆDŒOØŒÐ&ð #'¤/�”��ð 'Ð&ð
 #œoˆDŒOˆOˆOó    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.   ó   € å�D”OÑ$Ô$Ð$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:   ó   € å�D”O d¤oÑ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-8éÿÿÿÿr3   ú
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Ñ)Ô)�J€Dˆ$à×ÒÑÔ Ò-Ð-ÝŒLˆˆØ	×	Ò	Ñ	Ô	 >Ò	1Ð	1ÝŒNˆˆåÐ1Ñ2Ô2Ð2à�‚z€zØð C˜Ÿš­Ô(:¸:Ñ(FÔ(FÝ*0Ô*?Ñ*AÔ*AñCô Cˆˆõ Ô&Ñ(Ô(ˆÝÔ%Ñ'Ô'ˆå&.¨s¡m¤mÑ#€Cˆˆd�C˜ à(-Ð7�$˜‘*˜uÑ$Ð$°4€Kð Ð˜E QšJ˜JØ�{Š{˜7Ñ#Ô#ˆÝ˜a˜a ™gœgŸnšnÑ.Ô.Ñ/Ô/°°°Ô4×;Ò;¸GÑDÔDˆˆàˆð €DØ�‚z€zØ�Š�EÑÔÐÐà�Š�B‰ŒˆØ�Š�EÑÔÐØ‡K‚K�×!Ò!Ñ#Ô#Ñ$Ô$Ð$Ø‡K‚K�ÑÔÐØ‡K‚K�ÑÔÐØ‡K‚K�ÑÔÐØ�‚z€zØ�Š�HÑÔÐØ‡K‚K��	�rÑÔÐØ—)’)˜D‘/”/ DÑ(€Kõ �#•sÑÔð "Ø�jŠj˜Ñ!Ô!ˆÝŒ8�C˜×+Ò+¨GÑ4Ô4°aÑ8Ô8€DÝ�d—k’k‘m”mÑ$Ô$ S b SÔ)×0Ò0°Ñ9Ô9€Dà€FØ
‡M‚M�- %Ñ'Ñ(Ô(Ð(Ø�‚z€zØ�Š�i "‘nÑ%Ô%Ð%Ø
‡M‚M�, Ñ&Ñ'Ô'Ð'Øð 2Ø�Š�o¨Ñ0Ñ1Ô1Ð1Ø
ð (Ø�Š�j 3Ñ&Ñ'Ô'Ð'Ø
‡M‚M�*˜tÑ#Ñ$Ô$Ð$àˆm˜€GØ#Ÿyšy¨Ñ0Ô0€GˆOÑØ€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 )zëAdd 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Ñ2€GˆOÑØ€Nr   c                 ó(   — t          |d| fg¦  «        S )z¯Add 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ˆÝˆ|ÑÔ Ò!Ð! l°1¤o×&;Ò&;Ñ&=Ô&=ÀÒ&IÐ&IØ  ”OˆEøàÔ$ˆà€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ˆÔØ.ÐHÕ2HˆÔà#Ð; 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:¸$¼/Ñ1JÔ1JÐ_�T—_’_ WÑ-Ô-Ð-ÐPTÔP_ˆ
à'ˆÔð !×0Ò0°Ñ9Ô9Ø$Ø"ð
ð 
ˆð Œ>Ð%Ø ŸXšX g¤nÑ5Ô5ˆE�'‰Nàð 	OØÔ%ð OØÔ.×CÒCÀGÑLÔLðOà)0Ô)>��oÑ&Ð&à)-×)EÒ)EÀgÑ)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ÔIÈXÒ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   