o
    Df                     @   s   d dl Z d dlZd dlmZmZmZ d dlmZm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 dee
ZG dd deejZG dd deejZdS )    N)AuthRequestResponse)SIGNATURE_HMAC_SHA1SIGNATURE_TYPE_HEADER)
to_unicode)
ClientAuth)OAuth1Client   )build_requestextract_client_kwargs   
OAuthErrorc                   @   s2   e Zd ZdZdZdedejeedf fddZ	dS )
OAuth1Authz/Signs the httpx request using OAuth 1 (RFC5849)TrequestreturnNc                 c   sJ    |  |jt|j|j|j\}}}tt||d< t||||dV  d S )NzContent-Length)urlheadersbodyinitial_request)preparemethodstrr   r   contentlenr   )selfr   r   r   r    r   h/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/httpx_client/oauth1_client.py	auth_flow   s   
zOAuth1Auth.auth_flow)
__name__
__module____qualname____doc__requires_request_bodyr   typing	Generatorr   r   r   r   r   r   r      s    "r   c                	   @   sJ   e Zd ZeZddddddeedf	ddZdddZdd Z	e
d	d
 ZdS )AsyncOAuth1ClientNFc                 K   sJ   t |}tjj| fi | tj| d f|||||||||	|
d
| d S N)
	client_idclient_secrettokentoken_secretredirect_urirsa_keyverifiersignature_methodsignature_typeforce_include_body)r   httpxAsyncClient__init___OAuth1Clientr   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   kwargs_client_kwargsr   r   r   r5         
zAsyncOAuth1Client.__init__c                    sF   |r|| j _| j js| dd | j|fi |I dH }d| j _|S )a  Method for fetching an access token from the token endpoint.

        This is the final step in the OAuth 1 workflow. An access token is
        obtained using all previously obtained credentials, including the
        verifier from the authorization step.

        :param url: Access Token endpoint.
        :param verifier: A verifier string to prove authorization was granted.
        :param kwargs: Extra parameters to include for fetching access token.
        :return: A token dict.
        missing_verifierzMissing "verifier" valueN)authr/   handle_error_fetch_token)r   r   r/   r8   r+   r   r   r   fetch_access_token/   s   z$AsyncOAuth1Client.fetch_access_tokenc                    sD   | j |fi |I d H }| I d H }| |jt|}|| _|S N)postareadparse_response_tokenstatus_coder   r+   )r   r   r8   resptextr+   r   r   r   r>   C   s   zAsyncOAuth1Client._fetch_tokenc                 C   
   t | |r@   r   
error_typeerror_descriptionr   r   r   r=   J      
zAsyncOAuth1Client.handle_errorr@   )r    r!   r"   r   
auth_classr   r   r5   r?   r>   staticmethodr=   r   r   r   r   r'      s    

r'   c                	   @   s8   e Zd ZeZddddddeedf	ddZedd Z	dS )r	   NFc                 K   sJ   t |}tjj| fi | tj| | f|||||||||	|
d
| d S r(   )r   r3   Clientr5   r6   r7   r   r   r   r5   R   r:   zOAuth1Client.__init__c                 C   rG   r@   r   rH   r   r   r   r=   d   rK   zOAuth1Client.handle_error)
r    r!   r"   r   rL   r   r   r5   rM   r=   r   r   r   r   r	   O   s    
r	   )r%   r3   r   r   r   authlib.oauth1r   r   authlib.common.encodingr   r   authlib.oauth1.clientr	   r6   utilsr   r   base_clientr   r   r4   r'   rN   r   r   r   r   <module>   s    5