
    Ki#                     d   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ee      Z G d dee      Z G d deej:                        Z G d deej>                        Zy)    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                   D    e Zd ZdZdZdedej                  eedf   fdZ	y)r   zFSign requests for OAuth 2.0, currently only bearer token is supported.TrequestreturnNc              #   2  K   	 | j                  t        |j                        |j                  |j                        \  }}}t        t        |            |d<   t        ||||       y # t        $ r }dt        |       }t        |      |d }~ww xY 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#   s          {/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/authlib/integrations/httpx_client/oauth2_client.py	auth_flowzOAuth2Auth.auth_flow$   s     
	P!%GKK '//7??"C$ ),CIG$%tW   	P4SZLAK+D%O	Ps)   BA&A+ *B+	B4BBB)
__name__
__module____qualname____doc__requires_request_bodyr   typing	Generatorr   r,        r+   r   r      s4    P P PV-=-=gxQU>U-V Pr5   r   c                   @    e Zd ZdZdedej                  eedf   fdZy)r   Tr   r   Nc              #      K   | j                  |j                  t        |j                        |j                  |j
                        \  }}}t        t        |            |d<   t        ||||       y w)Nr   r   )r$   methodr%   r   r    r&   r'   r   )r)   r   r   r    r!   s        r+   r,   zOAuth2ClientAuth.auth_flow5   sd     !\\NNC,goow
Wd %(D	N !W4
 	
s   A3A5)	r-   r.   r/   r1   r   r2   r3   r   r,   r4   r5   r+   r   r   2   s.     
 
V-=-=gxQU>U-V 
r5   r   c                        e Zd ZeZeZeZe	Z
	 	 	 	 	 	 	 	 	 	 ddZdef fd	Zedef fd	       Zd Zddedfd	Zdddefd
ZdedfdZ xZS )r   Nc                     | j                  |      }t        j                  j                  | fi | t	               | _        t        j                  | fd |||||||||	|
d| y )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)   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   kwargsclient_kwargss                r+   rI   zAsyncOAuth2Client.__init__F   sz     <<VD""49=9 $(6 	
''A,K%+%	
 	
r5   Fc                    K   |sM|t         u rE| j                  s
t               | j                  | j                         d {    | j                  }t        |   ||fd|i| d {   S 7 +7 wNauth)r   rB   r   ensure_active_token
token_authsuperr   r)   r8   r   withhold_tokenrP   rL   	__class__s         r+   r   zAsyncOAuth2Client.requestl   so      $*<"<::'))**4::666??DW_VSFtFvFFF	 7 Gs#   ?A2A.&A2)A0*A20A2c                D  K   |sM|t         u rE| j                  s
t               | j                  | j                         d {    | j                  }t        |   ||fd|i|4 d {   }| d d d       d {    y 7 B7 7 	# 1 d {  7  sw Y   y xY wwrO   )r   rB   r   rQ   rR   rS   stream)r)   r8   r   rU   rP   rL   resprV   s          r+   rX   zAsyncOAuth2Client.streamy   s      $*<"<::'))**4::666??D7>&#CDCFC 	 	tJ	 	 		 7	 	 	 	 	sY   ?B B'B *B+B .B4B ?B	 B B 	B BBBB c                 X  K   | j                   4 d {    | j                  j                  | j                        r|j	                  d      }| j
                  j	                  d      }|r|r| j                  ||       d {    np| j
                  j	                  d      dk(  rH|d   }| j                  |d       d {   }| j                  r&| j                  ||	       d {    n
t               d d d       d {    y 7 7 7 K7 &7 # 1 d {  7  sw Y   y xY ww)
N)rE   refresh_tokentoken_endpointr[   
grant_typeclient_credentialsaccess_token)r^   )r`   )
rJ   rB   
is_expiredrE   getmetadatar[   fetch_tokenrD   r   )r)   rB   r[   r   r`   	new_tokens         r+   rQ   z%AsyncOAuth2Client.ensure_active_token   s    ++ 	. 	.zz$$DKK$8 %		/ :mm''(89 S,,S,NNN]]&&|48LL#(#8L&*&6&6(< '7 ' !I (("//	/UUU+--	. 	. 	.
 O! V	. 	. 	. 	.s{   D*DD*A-DD>DD&D*D+D:D*DD*DDDD*D'DD'#D* POSTc                   K   |j                         dk(  r2 | j                  |ft        t        |            ||d| d {   }nId|v rdj	                  ||g      }ndj	                  ||g      } | j
                  |f||d| d {   }| j                  d   D ]
  } ||      } | j                  |      S 7 {7 3w)Nrg   datar    rP   ?&)r    rP   access_token_response)upperpostdictr	   joinrb   compliance_hookparse_response_token)	r)   r   r!   r    rP   r8   rL   rY   hooks	            r+   _fetch_tokenzAsyncOAuth2Client._fetch_token   s      <<>V#"z$/0'PV D czhhT{+hhT{+!#LwTLVLLD(()@A 	D:D	 ((.. Ms%   A CB>A	CC 2C Cc                 n  K    | j                   |ft        t        |            ||d| d {   }| j                  d   D ]
  } ||      } | j	                  |      }	d|	vr|| j
                  d<   | j                  r%| j                  | j
                  |       d {    | j
                  S 7 7 w)Nri   refresh_token_responser[   r]   )ro   rp   r	   rr   rs   rB   rD   )
r)   r   r[   r!   r    rP   rL   rY   rt   rB   s
             r+   _refresh_tokenz AsyncOAuth2Client._refresh_token   s      TYY
:d+,gD
LR
 
 (()AB 	D:D	 ))$/%'*7DJJ'##DJJm#LLLzz
 Ms"   -B5B1A0B5 B3!B53B5c                 T     | j                   |ft        t        |            ||d|S )Nri   )ro   rp   r	   )r)   r   r!   rP   r    rL   s         r+   
_http_postzAsyncOAuth2Client._http_post   s8     tyy
:d+,gD
LR
 	
r5   )
NNNNNNNheaderN<   )r-   r.   r/   r   SESSION_REQUEST_PARAMSr   client_auth_classr   token_auth_classr   oauth_error_classrI   r   r   r   rX   rQ   ru   rx   rz   __classcell__rV   s   @r+   r   r   ?   s    0(!" #'(, $
N +06HG */6H .( /8 4 #5t
r5   r   c                   n     e Zd ZeZeZeZe	Z
	 	 	 	 	 	 	 	 	 ddZed        Zdef fd	Zdef fd	Z xZS )r   c
                    | j                  |
      }|j                  dd       }|t        j                  |      |d<   t        j                  j
                  | fi | t        j
                  | f| |||||||||	d
|
 y )Napp)r   	transport)
r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   )rF   poprG   WSGITransportClientrI   rK   )r)   r<   r=   r>   r?   r@   rA   rB   rC   rD   rL   rM   	app_values                r+   rI   zOAuth2Client.__init__   s     <<VD!%%eT2	 ).)<)<)KM+&d4m4	
''A,K%+%	
 	
r5   c                     t        | |      )Nr   )
error_typeerror_descriptions     r+   handle_errorzOAuth2Client.handle_error   s    %677r5   Fc                     |sO|t         u rG| j                  s
t               | j                  | j                        s
t	               | j
                  }t        |   ||fd|i|S rO   )r   rB   r   rQ   r   rR   rS   r   rT   s         r+   r   zOAuth2Client.request  s_     $*<"<::'))++DJJ7'))??Dwvs@@@@r5   c                     |sO|t         u rG| j                  s
t               | j                  | j                        s
t	               | j
                  }t        |   ||fd|i|S rO   )r   rB   r   rQ   r   rR   rS   rX   rT   s         r+   rX   zOAuth2Client.stream  s_     $*<"<::'))++DJJ7'))??Dw~fc????r5   )	NNNNNNNr{   N)r-   r.   r/   r   r}   r   r~   r   r   r   r   rI   staticmethodr   r   r   rX   r   r   s   @r+   r   r      st    0(!" #'(, #
J 8 8 +06HA +06H@ @r5   r   ) r2   
contextlibr   rG   anyior   r   r   r   r   authlib.common.urlsr	   authlib.oauth2.authr
   r   authlib.oauth2.clientr   rK   base_clientr   r   r   r   utilsr   r   __all__r   r   rH   r   r   r4   r5   r+   <module>r      s     *   $    * * ) ? + + $ 3 &  Py P&

tZ 

Q
u'8'8 Q
hJ@=%,, J@r5   