§
    iÝ[fÝ  ã                   ó–   — d dl Z d dlmZmZ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  G d„ d	e¦  «        Zd
„ Z ee¦  «        ZdS )é    N)ÚgÚjsonÚResponse)Úrequest)Ú
LocalProxy)Údefault_json_headers)ÚResourceProtector)ÚOAuth1Errorc                   óJ   — e Zd ZdZ	 	 d
d„Z	 	 dd„Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
dS )r	   a  A protecting method for resource servers. Initialize a resource
    protector with the these method:

    1. query_client
    2. query_token,
    3. exists_nonce

    Usually, a ``query_client`` method would look like (if using SQLAlchemy)::

        def query_client(client_id):
            return Client.query.filter_by(client_id=client_id).first()

    A ``query_token`` method accept two parameters, ``client_id`` and ``oauth_token``::

        def query_token(client_id, oauth_token):
            return Token.query.filter_by(client_id=client_id, oauth_token=oauth_token).first()

    And for ``exists_nonce``, if using cache, we have a built-in hook to create this method::

        from authlib.integrations.flask_oauth1 import create_exists_nonce_func

        exists_nonce = create_exists_nonce_func(cache)

    Then initialize the resource protector with those methods::

        require_oauth = ResourceProtector(
            app, query_client=query_client,
            query_token=query_token, exists_nonce=exists_nonce,
        )
    Nc                 óp   — || _         || _        || _        || _        |r|                      |¦  «         d S d S ©N)Úquery_clientÚquery_tokenÚ_exists_nonceÚappÚinit_app)Úselfr   r   r   Úexists_nonces        úh/var/www/piapp/venv/lib/python3.11/site-packages/authlib/integrations/flask_oauth1/resource_protector.pyÚ__init__zResourceProtector.__init__)   sK   € à(ˆÔØ&ˆÔØ)ˆÔàˆŒØð 	Ø�MŠM˜#ÑÔÐÐÐð	ð 	ó    c                 óÈ   — |�|| _         |�|| _        |�|| _        |j                             d¦  «        }|r#t          |t          t          f¦  «        r|| _        || _	        d S )NÚ"OAUTH1_SUPPORTED_SIGNATURE_METHODS)
r   r   r   ÚconfigÚgetÚ
isinstanceÚlistÚtupleÚSUPPORTED_SIGNATURE_METHODSr   )r   r   r   r   r   Úmethodss         r   r   zResourceProtector.init_app3   sp   € àÐ#Ø ,ˆDÔØÐ"Ø*ˆDÔØÐ#Ø!-ˆDÔà”*—.’.Ð!EÑFÔFˆØð 	7•z '­Dµ%¨=Ñ9Ô9ð 	7Ø/6ˆDÔ,àˆŒˆˆr   c                 ó,   — |                       |¦  «        S r   )r   )r   Ú	client_ids     r   Úget_client_by_idz"ResourceProtector.get_client_by_idB   s   € Ø× Ò  Ñ+Ô+Ð+r   c                 óB   — |                       |j        |j        ¦  «        S r   )r   r"   Útoken)r   r   s     r   Úget_token_credentialz&ResourceProtector.get_token_credentialE   s   € Ø×Ò Ô 1°7´=ÑAÔAÐAr   c                 óˆ   — | j         st          d¦  «        ‚|j        }|j        }|j        }|                       ||||¦  «        S )Nz$"exists_nonce" function is required.)r   ÚRuntimeErrorÚ	timestampr"   r%   )r   Únoncer   r)   r"   r%   s         r   r   zResourceProtector.exists_nonceH   sN   € ØÔ!ð 	GÝÐEÑFÔFÐFàÔ%ˆ	ØÔ%ˆ	Ø”ˆØ×!Ò! %¨°I¸uÑEÔEÐEr   c                 óÚ   — |                       t          j        t          j        t          j                             d¬¦  «        t          j        ¦  «        }|j        t          _	        |j        S )NT)Úflat)
Úvalidate_requestÚ_reqÚmethodÚurlÚformÚto_dictÚheadersÚ
credentialr   Ú authlib_server_oauth1_credential)r   Úreqs     r   Úacquire_credentialz$ResourceProtector.acquire_credentialQ   sP   € Ø×#Ò#ÝŒKÝŒHÝŒI×Ò 4ÐÑ(Ô(ÝŒLñ	
ô 
ˆð .1¬^�Ô*ØŒ~Ðr   c                 ó   ‡ — ˆ fd„}|S )Nc                 óJ   •‡ — t          j        ‰ ¦  «        ˆ ˆfd„¦   «         }|S )Nc                  ó  •— 	 ‰                      ¦   «          nf# t          $ rY}t          |                     ¦   «         ¦  «        }t	          t          j        |¦  «        |j        t          ¬¦  «        cY d }~S d }~ww xY w ‰| i |¤ŽS )N)Ústatusr3   )	r7   r
   ÚdictÚget_bodyr   r   ÚdumpsÚstatus_coder   )ÚargsÚkwargsÚerrorÚbodyÚfr   s       €€r   Ú	decoratedz>ResourceProtector.__call__.<locals>.wrapper.<locals>.decorated]   s°   ø€ ðØ×+Ò+Ñ-Ô-Ð-Ð-øÝ"ð ð ð Ý §¢Ñ 0Ô 0Ñ1Ô1�DÝ#Ýœ
 4Ñ(Ô(Ø$Ô0Ý 4ðñ ô ð ð ð ð ð ð øøøøðøøøð �q˜$Ð) &Ð)Ð)Ð)s   ƒ ˜
A;¢AA6Á0A;Á6A;)Ú	functoolsÚwraps)rD   rE   r   s   ` €r   Úwrapperz+ResourceProtector.__call__.<locals>.wrapper\   s?   øø€ ÝŒ_˜QÑÔð
*ð 
*ð 
*ð 
*ð 
*ñ  Ôð
*ð Ðr   © )r   ÚscoperH   s   `  r   Ú__call__zResourceProtector.__call__[   s#   ø€ ð	ð 	ð 	ð 	ð 	ð ˆr   )NNNN)NNNr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r&   r   r7   rK   rI   r   r   r	   r	   
   s­   € € € € € ðð ð< /3Ø04ðð ð ð ð <@Ø"ðð ð ð ð,ð ,ð ,ðBð Bð BðFð Fð Fðð ð ðð ð ð ð ð r   r	   c                  ó*   — t          j        d¦  «        S )Nr5   )r   r   rI   r   r   Ú_get_current_credentialrQ   m   s   € ÝŒ5Ð3Ñ4Ô4Ð4r   )rF   Úflaskr   r   r   r   r.   Úwerkzeug.localr   Úauthlib.constsr   Úauthlib.oauth1r	   Ú_ResourceProtectorÚauthlib.oauth1.errorsr
   rQ   Úcurrent_credentialrI   r   r   ú<module>rY      så   ðØ Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ø /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BØ -Ð -Ð -Ð -Ð -Ð -ð`ð `ð `ð `ð `Ð*ñ `ô `ð `ðF5ð 5ð 5ð  �ZÐ 7Ñ8Ô8Ð Ð Ð r   