o
    ^[2h#                     @   s(  d dl Z d dlm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 g dZG dd dee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)asynccontextmanager)Lock)USE_CLIENT_DEFAULT)Auth)Request)Response)
url_decode)
ClientAuth)	TokenAuth)OAuth2Client   )InvalidTokenError)MissingTokenError
OAuthError)UnsupportedTokenTypeError   )HTTPX_CLIENT_KWARGS)build_request)
OAuth2AuthOAuth2ClientAuthAsyncOAuth2Clientr   c                   @   s2   e Zd ZdZdZdedejeedf fddZ	dS )r   zFSign requests for OAuth 2.0, currently only bearer token is supported.TrequestreturnNc              
   c   s|    z#|  t|j|j|j\}}}tt||d< t||||dV  W d S  ty= } zdt| }t|d|d }~ww )NContent-Lengthurlheadersbodyinitial_requestzUnsupported token_type: )description)	preparestrr   r   contentlenr   KeyErrorr   )selfr   r   r   r   errorr     r(   /home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/site-packages/authlib/integrations/httpx_client/oauth2_client.py	auth_flow$   s   
zOAuth2Auth.auth_flow)
__name__
__module____qualname____doc__requires_request_bodyr   typing	Generatorr   r*   r(   r(   r(   r)   r      s    "r   c                   @   s.   e Zd ZdZdedejeedf fddZdS )r   Tr   r   Nc                 c   sJ    |  |jt|j|j|j\}}}tt||d< t||||dV  d S )Nr   r   )r!   methodr"   r   r   r#   r$   r   )r&   r   r   r   r   r(   r(   r)   r*   5   s   
zOAuth2ClientAuth.auth_flow)	r+   r,   r-   r/   r   r0   r1   r   r*   r(   r(   r(   r)   r   2   s    "r   c                       s   e Zd ZeZeZeZe	Z
										dddZdef fdd	Zedef fd	d
	Zdd ZddedfddZdddefddZdedfddZ  ZS )r   Nheader<   c                 K   sT   |  |}tjj| fi | t | _tj| fd |||||||||	|
d| d S )N)session	client_idclient_secrettoken_endpoint_auth_methodrevocation_endpoint_auth_methodscoperedirect_uritokentoken_placementupdate_tokenleeway)_extract_session_request_paramshttpxAsyncClient__init__r   _token_refresh_lock_OAuth2Client)r&   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   kwargsclient_kwargsr(   r(   r)   rC   F   s(   

zAsyncOAuth2Client.__init__Fc                    sR   |s|t u r| jst | | jI d H  | j}t j||fd|i|I d H S Nauth)r   r<   r   ensure_active_token
token_authsuperr   r&   r2   r   withhold_tokenrI   rF   	__class__r(   r)   r   l   s    zAsyncOAuth2Client.requestc              	     s   |s|t u r| jst | | jI d H  | j}t j||fd|i|4 I d H }|V  W d   I d H  d S 1 I d H s?w   Y  d S rH   )r   r<   r   rJ   rK   rL   stream)r&   r2   r   rN   rI   rF   resprO   r(   r)   rQ   y   s   $.zAsyncOAuth2Client.streamc              	      s   | j 4 I d H U | jj| jdrR|d}| jd}|r+|r+| j||dI d H  n'| jddkrO|d }| j|ddI d H }| jrN| j||d	I d H  nt	 W d   I d H  d S 1 I d H scw   Y  d S )
N)r?   refresh_tokentoken_endpointrS   
grant_typeclient_credentialsaccess_token)rV   )rX   )
rD   r<   
is_expiredr?   getmetadatarS   fetch_tokenr>   r   )r&   r<   rS   r   rX   	new_tokenr(   r(   r)   rJ      s"   
.z%AsyncOAuth2Client.ensure_active_token POSTc           	         s   |  dkr| j|ftt|||d|I d H }n"d|v r(d||g}nd||g}| j|f||d|I d H }| jd D ]}||}qC| |S )Nr_   datar   rI   ?&)r   rI   access_token_response)upperpostdictr   joinrZ   compliance_hookparse_response_token)	r&   r   r   r   rI   r2   rF   rR   hookr(   r(   r)   _fetch_token   s    	

zAsyncOAuth2Client._fetch_tokenc           
         s   | j |ftt|||d|I d H }| jd D ]}||}q| |}	d|	vr/|| jd< | jr=| j| j|dI d H  | jS )Nr`   refresh_token_responserS   rU   )rf   rg   r   ri   rj   r<   r>   )
r&   r   rS   r   r   rI   rF   rR   rk   r<   r(   r(   r)   _refresh_token   s    	


z AsyncOAuth2Client._refresh_tokenc                 K   s"   | j |ftt|||d|S )Nr`   )rf   rg   r   )r&   r   r   rI   r   rF   r(   r(   r)   
_http_post   s   zAsyncOAuth2Client._http_post)
NNNNNNNr3   Nr4   )r+   r,   r-   r   SESSION_REQUEST_PARAMSr   client_auth_classr   token_auth_classr   oauth_error_classrC   r   r   r   rQ   rJ   rl   rn   ro   __classcell__r(   r(   rO   r)   r   ?   sD    
'

r   c                       sl   e Zd ZeZeZeZe	Z
									dddZedd Zdef fdd		Zdef fd
d	Z  ZS )r   Nr3   c
                 K   sn   |  |
}|dd }|d urtj|d|d< tjj| fi | tj| f| |||||||||	d
|
 d S )Napp)ru   	transport)
r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   )r@   poprA   WSGITransportClientrC   rE   )r&   r6   r7   r8   r9   r:   r;   r<   r=   r>   rF   rG   	app_valuer(   r(   r)   rC      s*   

zOAuth2Client.__init__c                 C   s
   t | |)Nr   )
error_typeerror_descriptionr(   r(   r)   handle_error   s   
zOAuth2Client.handle_errorFc                    J   |s|t u r| jst | | jst | j}t j||fd|i|S rH   )r   r<   r   rJ   r   rK   rL   r   rM   rO   r(   r)   r        zOAuth2Client.requestc                    r~   rH   )r   r<   r   rJ   r   rK   rL   rQ   rM   rO   r(   r)   rQ     r   zOAuth2Client.stream)	NNNNNNNr3   N)r+   r,   r-   r   rp   r   rq   r   rr   r   rs   rC   staticmethodr}   r   r   rQ   rt   r(   r(   rO   r)   r      s*    
%
r   ) r0   
contextlibr   rA   anyior   r   r   r   r   authlib.common.urlsr   authlib.oauth2.authr	   r
   authlib.oauth2.clientr   rE   base_clientr   r   r   r   utilsr   r   __all__r   r   rB   r   ry   r(   r(   r(   r)   <module>   s0     