o
    Df                     @   sz   d dl Z d dlZd dlmZ ddlmZmZ ddlmZm	Z	 e
eZddgZG dd deZG d	d de	Zd
d ZdS )    N)urlparse   )MissingRequestTokenErrorMissingTokenError)
OAuth1Base
OAuth2BaseAsyncOAuth1MixinAsyncOAuth2Mixinc                   @   s*   e Zd ZdddZdddZdddZdS )	r   Nc              	      sZ   |   4 I d H }t| |||||I d H W  d   I d H  S 1 I d H s&w   Y  d S N)_get_oauth_client_http_request)selfmethodurltokenkwargssession r   c/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/base_client/async_app.pyrequest   s   0zAsyncOAuth1Mixin.requestc              	      s   | j std| jr|| j |  4 I dH <}||_i }| jr(|| j |j| jfi |I dH }t	
d| |j| j fi |}|d }W d  I dH  n1 I dH s[w   Y  |||dS )Generate the authorization url and state for HTTP redirect.

        :param redirect_uri: Callback or redirect URI for authorization.
        :param kwargs: Extra parameters to include.
        :return: dict
        Missing "authorize_url" valueNzFetch request token: oauth_token)r   request_tokenstate)authorize_urlRuntimeErrorauthorize_paramsupdater   redirect_urirequest_token_paramsfetch_request_tokenrequest_token_urllogdebugcreate_authorization_url)r   r   r   clientparamsr   r   r   r   r   r   r%      s    
(	z)AsyncOAuth1Mixin.create_authorization_urlc              	      s   |   4 I dH 4}|du rt i }|| || ||_| jp$i }|j| jfi |I dH }W d  I dH  |S 1 I dH sCw   Y  |S )zFetch access token in one step.

        :param request_token: A previous request token for OAuth 1.
        :param kwargs: Extra parameters to fetch access token.
        :return: A token dict.
        N)r   r   r   r   access_token_paramsfetch_access_tokenaccess_token_url)r   r   r   r&   r   r'   r   r   r   r)   ,   s   




z#AsyncOAuth1Mixin.fetch_access_tokenr
   )__name__
__module____qualname__r   r%   r)   r   r   r   r   r      s    

c                   @   s<   e Zd ZdddZdd ZdddZddd	Zdd
dZdS )r	   Nc                    s&   | j r| j |||dI d H  d S d S )N)refresh_tokenaccess_token)_update_token)r   r   r.   r/   r   r   r   _on_update_tokenA   s   z!AsyncOAuth2Mixin._on_update_tokenc              	      s   | j rLd| jvrL| jdi | j4 I d H %}|jd| j ddI d H }|  | }t |d< W d   I d H  n1 I d H sAw   Y  | j| | jS )N
_loaded_atGETT)withhold_tokenr   )	_server_metadata_urlserver_metadata
client_clsclient_kwargsr   raise_for_statusjsontimer   )r   r&   respmetadatar   r   r   load_server_metadataI   s   (z%AsyncOAuth2Mixin.load_server_metadatac              	      sp   |   I d H }| jdi |4 I d H }t| |||||I d H W  d   I d H  S 1 I d H s1w   Y  d S )Nr   )r>   r   r   )r   r   r   r   r   r=   r   r   r   r   r   S   s
   0zAsyncOAuth2Mixin.requestc              	      s   |   I dH }| jp|d}|std| jr|| j | jdi |4 I dH }||_| j||fi |W  d  I dH  S 1 I dH sIw   Y  dS )r   Nauthorization_endpointr   r   )	r>   r   getr   r   r   r   r    _create_oauth2_authorization_url)r   r   r   r=   r?   r&   r   r   r   r%   X   s   0z)AsyncOAuth2Mixin.create_authorization_urlc              	      s   |   I dH }| jp|d}| jdi |4 I dH /}|dur$||_i }| jr/|| j || |j|fi |I dH }W d  I dH  |S 1 I dH sQw   Y  |S )a  Fetch access token in the final step.

        :param redirect_uri: Callback or Redirect URI that is used in
                             previous :meth:`authorize_redirect`.
        :param kwargs: Extra parameters to fetch access token.
        :return: A token dict.
        Ntoken_endpointr   )r>   r*   r@   r   r   r(   r   fetch_token)r   r   r   r=   rB   r&   r'   r   r   r   r   r)   l   s   
z#AsyncOAuth2Mixin.fetch_access_token)NNr
   )r+   r,   r-   r1   r>   r   r%   r)   r   r   r   r   r	   @   s    



c                    s   | dd }|d}| jr|dst| j|}|r*|j||fi |I d H S |d u r;| jr;|r;| |I d H }|d u rBt ||_	|j||fi |I d H S )Nr   r4   )zhttps://zhttp://)
popr@   api_base_url
startswithr   urljoinr   _fetch_tokenr   r   )ctxr   r   r   r   r   r   r4   r   r   r   r      s   
r   )r;   loggingauthlib.common.urlsr   errorsr   r   sync_appr   r   	getLoggerr+   r#   __all__r   r	   r   r   r   r   r   <module>   s    
1A