o
    b                      @   s   d dl Z d dlZd dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZ ddlmZ dd	lmZmZmZ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ZG dd deeZdS )    N)AsyncClientAuthClientRequestResponseUSE_CLIENT_DEFAULT)
url_decode)OAuth2Client)
ClientAuth	TokenAuth   )HTTPX_CLIENT_KWARGS   )
OAuthErrorInvalidTokenErrorMissingTokenErrorUnsupportedTokenTypeError)
OAuth2AuthOAuth2ClientAuthAsyncOAuth2Clientc                   @   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|j|||dV  W d S  ty= } zd	t|}t
|dd }~ww )NContent-LengthmethodurlheadersdatazUnsupported token_type: {})description)preparestrr   r   contentlenr   r   KeyErrorformatr   )selfr   r   r   bodyerrorr    r(   n/var/www/secure340b-portal/env/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   sL    |  |jt|j|j|j\}}}tt||d< t|j|||dV  d S )Nr   r   )r   r   r    r   r   r!   r"   r   )r%   r   r   r   r&   r(   r(   r)   r*   '   s   
zOAuth2ClientAuth.auth_flow)	r+   r,   r-   r/   r   r0   r1   r   r*   r(   r(   r(   r)   r   $   s    "r   c                       s   e Zd ZeZeZeZ						dddZ	e
dd Z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headerc
                 K   s\   |  |
}tj| fi | t | _| j  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)_extract_session_request_paramsr   __init__asyncioEvent_token_refresh_eventset_OAuth2Clientr%   r5   r6   r7   r8   r9   r:   r;   r<   r=   kwargsZclient_kwargsr(   r(   r)   r?   4   s"   



zAsyncOAuth2Client.__init__c                 C   
   t | |Nr   Z
error_typeZerror_descriptionr(   r(   r)   handle_errorN      
zAsyncOAuth2Client.handle_errorFc                    s\   |s|t u r| jst | j r|  I d H  | j}tt| j||fd|i|I d H S Nauth)	r   r;   r   
is_expiredensure_active_token
token_authsuperr   r   r%   r   r   Zwithhold_tokenrN   rF   	__class__r(   r)   r   R   s   

zAsyncOAuth2Client.requestc                    s   | j  rU| j   | jd}| jd}|r&|r&| j||dI d H  n(| jddkrK| jd }| j|ddI d H }| jrJ| j||dI d H  nt	 | j 
  d S | j  I d H  d S 	Nrefresh_tokenZtoken_endpointrW   
grant_typeZclient_credentialsaccess_token)rY   )rZ   )rB   is_setclearr;   getmetadatarW   fetch_tokenr=   r   rC   waitr%   rW   r   rZ   r;   r(   r(   r)   rP   _   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 )Nrc   r   r   rN   ?&)r   rN   Zaccess_token_response)	upperpostdictr   joinr]   compliance_hookparse_response_tokenjson)	r%   r   r&   r   rN   r   rF   resphookr(   r(   r)   _fetch_tokens   s"   
zAsyncOAuth2Client._fetch_tokenc           
         s   | j |ftt|||d|I d H }| jd D ]}||}q| | }	d|	vr1|| jd< | jr?| j| j|dI d H  | jS )Nrd   Zrefresh_token_responserW   rX   )rh   ri   r   rk   rl   rm   r;   r=   )
r%   r   rW   r&   r   rN   rF   rn   ro   r;   r(   r(   r)   _refresh_token   s"   

z AsyncOAuth2Client._refresh_tokenc                 K   s"   | j |ftt|||d|S )Nrd   )rh   ri   r   )r%   r   r&   rN   r   rF   r(   r(   r)   
_http_post   s   
zAsyncOAuth2Client._http_post	NNNNNNNr2   N)r+   r,   r-   r   SESSION_REQUEST_PARAMSr   client_auth_classr   token_auth_classr?   staticmethodrK   r   r   rP   rp   rq   rr   __classcell__r(   r(   rT   r)   r   .   s,    



r   c                       sX   e Zd ZeZeZeZ						dddZ	e
dd Zdef fdd		Zd
d Z  ZS )r	   Nr2   c
                 K   sH   |  |
}tj| fi | tj| f| |||||||||	d
|
 d S r3   )r>   r   r?   rD   rE   r(   r(   r)   r?      s   

zOAuth2Client.__init__c                 C   rG   rH   rI   rJ   r(   r(   r)   rK      rL   zOAuth2Client.handle_errorFc                    sN   |s|t u r| jst | j r|   | j}tt| j||fd|i|S rM   )	r   r;   r   rO   rP   rQ   rR   r	   r   rS   rT   r(   r)   r      s   

zOAuth2Client.requestc                 C   s|   | j d}| jd}|r|r| j||d d S | jddkr;| j d }| j|dd}| jr9| j||d d S d S t rV   )r;   r]   r^   rW   r_   r=   r   ra   r(   r(   r)   rP      s   
z OAuth2Client.ensure_active_tokenrs   )r+   r,   r-   r   rt   r   ru   r   rv   r?   rw   rK   r   r   rP   rx   r(   r(   rT   r)   r	      s    

r	   )r@   r0   Zhttpxr   r   r   r   r   r   Zauthlib.common.urlsr   Zauthlib.oauth2.clientr	   rD   Zauthlib.oauth2.authr
   r   utilsr   Zbase_clientr   r   r   r   __all__r   r   r   r(   r(   r(   r)   <module>   s     
o