
    LdQ!                     *   d dl Z d dlmZ d dlZd dlmZmZ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mZ d
dlmZmZmZ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dS )    N)asynccontextmanager)AuthRequestResponseUSE_CLIENT_DEFAULT)Lock)
url_decode)OAuth2Client)
ClientAuth	TokenAuth   )HTTPX_CLIENT_KWARGSbuild_request   )
OAuthErrorInvalidTokenErrorMissingTokenErrorUnsupportedTokenTypeError)
OAuth2AuthOAuth2ClientAuthAsyncOAuth2Clientr
   c                   B    e Zd ZdZdZdedej        eedf         fdZ	dS )r   zFSign requests for OAuth 2.0, currently only bearer token is supported.TrequestreturnNc              #   j  K   	 |                      t          |j                  |j        |j                  \  }}}t          t          |                    |d<   t          ||||          V  d S # t          $ r7}d                    t          |                    }t          |          d }~ww xY w)NContent-Lengthurlheadersbodyinitial_requestzUnsupported token_type: {})description)
preparestrr   r   contentlenr   KeyErrorformatr   )selfr   r   r   r    errorr"   s          UF:\djangOuth\env\Lib\site-packages\authlib/integrations/httpx_client/oauth2_client.py	auth_flowzOAuth2Auth.auth_flow   s      	E!%GK  '/7?"D "DC$(+CIIG$%CtU\]]]]]]]] 	E 	E 	E6==c%jjIIK+DDDD	Es   A+A1 1
B2;2B--B2)
__name__
__module____qualname____doc__requires_request_bodyr   typing	Generatorr   r,        r+   r   r      sZ        PP E EV-=gxQU>U-V E E E E E Er5   r   c                   >    e Zd ZdZdedej        eedf         fdZdS )r   Tr   r   Nc              #      K   |                      |j        t          |j                  |j        |j                  \  }}}t          t          |                    |d<   t          ||||          V  d S )Nr   r   )r#   methodr$   r   r   r%   r&   r   )r)   r   r   r   r    s        r+   r,   zOAuth2ClientAuth.auth_flow*   sv      !\\NC,,gowP PWd$'D		NN !W4QXYYYYYYYYr5   )	r-   r.   r/   r1   r   r2   r3   r   r,   r4   r5   r+   r   r   '   sT         Z ZV-=gxQU>U-V Z Z Z Z Z Z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   Nheaderc
                     |                      |
          }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)_extract_session_request_paramshttpxAsyncClient__init__r   _token_refresh_lock_OAuth2Clientr)   r>   r?   r@   rA   rB   rC   rD   rE   rF   kwargsclient_kwargss               r+   rJ   zAsyncOAuth2Client.__init__8   s     <<VDD"499=999 $(66 	
}'A,Kl%	
 	
 *0	
 	
 	
 	
 	
r5   Fc                    K   |sE|t           u r<| j        st                      |                     | j                   d {V  | j        } t          t          |           j        ||fd|i| d {V S Nauth)r   rD   r   ensure_active_token
token_authsuperr   r   r)   r8   r   withhold_tokenrR   rN   	__class__s         r+   r   zAsyncOAuth2Client.requestQ   s       	#$*<"<"<: *')))**4:666666666?D;U,d33;C. .".&,. . . . . . . . 	.r5   c                D  K   |sE|t           u r<| j        st                      |                     | j                   d {V  | j        } t          t          |           j        ||fd|i|4 d {V 	 }|W V  d d d           d {V  d S # 1 d {V swxY w Y   d S rQ   )r   rD   r   rS   rT   rU   r   stream)r)   r8   r   rW   rR   rN   resprX   s          r+   rZ   zAsyncOAuth2Client.stream]   se      	#$*<"<"<: *')))**4:666666666?D85*D118C. .".&,. . 	 	 	 	 	 	 	 	15JJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   6B
BBc                 0  K   | j         4 d {V  | j                                        r|                    d          }| j                            d          }|r |r|                     ||           d {V  nv| j                            d          dk    rJ|d         }|                     |d           d {V }| j        r|                     ||           d {V  nt                      	 d d d           d {V  d S # 1 d {V swxY w Y   d S )	Nrefresh_tokentoken_endpointr]   
grant_typeclient_credentialsaccess_token)r`   )rb   )	rK   rD   
is_expiredgetmetadatar]   fetch_tokenrF   r   )r)   rD   r]   r   rb   	new_tokens         r+   rS   z%AsyncOAuth2Client.ensure_active_tokenk   s     + 	. 	. 	. 	. 	. 	. 	. 	.z$$&& . %		/ : :m''(899  .S .,,S,NNNNNNNNNN]&&|448LLL#(#8L&*&6&6sG[&6&\&\ \ \ \ \ \ \I( V"//	/UUUUUUUUU+----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   C!D
DD POSTc                   K   |                                 dk    r3 | j        |ft          t          |                    ||d| d {V }nJd|v rd                    ||g          }nd                    ||g          } | j        |f||d| d {V }| j        d         D ]} ||          }|                     |          S )Nri   datar   rR   ?&)r   rR   access_token_response)upperpostdictr	   joinrd   compliance_hookparse_response_token)	r)   r   r    r   rR   r8   rN   r[   hooks	            r+   _fetch_tokenzAsyncOAuth2Client._fetch_tokenz   s     <<>>V##"%z$//00'% %#% % % % % % % %DD czzhhT{++hhT{++!#LwTLLVLLLLLLLLD()@A 	 	D4::DD((...r5   c                 F  K    | j         |ft          t          |                    ||d| d {V }| j        d         D ]} ||          }|                     |          }	d|	vr
|| j        d<   | j        r"|                     | j        |           d {V  | j        S )Nrk   refresh_token_responser]   r_   )rq   rr   r	   rt   ru   rD   rF   )
r)   r   r]   r    r   rR   rN   r[   rv   rD   s
             r+   _refresh_tokenz AsyncOAuth2Client._refresh_token   s      TY!:d++,,g! !! ! ! ! ! ! ! ! ()AB 	 	D4::DD))$//%''*7DJ' 	M##DJm#LLLLLLLLLzr5   c                 Z     | j         |ft          t          |                    ||d|S )Nrk   )rq   rr   r	   )r)   r   r    rR   r   rN   s         r+   
_http_postzAsyncOAuth2Client._http_post   sE    ty2:d++,,$2 2*02 2 	2r5   	NNNNNNNr:   N)r-   r.   r/   r   SESSION_REQUEST_PARAMSr   client_auth_classr   token_auth_classr   oauth_error_classrJ   r   r   r   rZ   rS   rw   rz   r|   __classcell__rX   s   @r+   r   r   1   s#       0(!"59,015*.-5"
 
 
 
2 9>DV 
. 
. 
. 
. 
. 
. 7<CU      . . . ,.tBT"(/ / / /$ 7;%)0B   $ $(.@$ 2 2 2 2 2 2 2 2r5   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
   Nr:   c
                     |                      |
          }t          j        j        | fi | t	          j        | f| |||||||||	d
|
 d S r<   )rG   rH   ClientrJ   rL   rM   s               r+   rJ   zOAuth2Client.__init__   s     <<VDDd44m444	
}'A,Kl%	
 	
 *0	
 	
 	
 	
 	
r5   c                 "    t          | |          )N)r   )
error_typeerror_descriptions     r+   handle_errorzOAuth2Client.handle_error   s    %6777r5   Fc                     |sM|t           u rD| j        st                      |                     | j                  st	                      | j        } t          t          |           j        ||fd|i|S rQ   )	r   rD   r   rS   r   rT   rU   r
   r   rV   s         r+   r   zOAuth2Client.request   s     	#$*<"<"<: *')))++DJ77 *')))?D0u\4((0C. .".&,. . 	.r5   c                     |sM|t           u rD| j        st                      |                     | j                  st	                      | j        } t          t          |           j        ||fd|i|S rQ   )	r   rD   r   rS   r   rT   rU   r
   rZ   rV   s         r+   rZ   zOAuth2Client.stream   s     	#$*<"<"<: *')))++DJ77 *')))?D/u\4((/C. .".&,. . 	.r5   r}   )r-   r.   r/   r   r~   r   r   r   r   r   r   rJ   staticmethodr   r   r   rZ   r   r   s   @r+   r
   r
      s        0(!"59,015*.-5"
 
 
 
* 8 8 \8 38>P . . . . . . 27=O . . . . . . . . . .r5   r
   ) r2   
contextlibr   rH   r   r   r   r   anyior   authlib.common.urlsr	   authlib.oauth2.clientr
   rL   authlib.oauth2.authr   r   utilsr   r   base_clientr   r   r   r   __all__r   r   rI   r   r   r4   r5   r+   <module>r      s    * * * * * *  = = = = = = = = = = = =       * * * * * * ? ? ? ? ? ? 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5             E E E E Ey E E EZ Z Z Z ZtZ Z Z Zp2 p2 p2 p2 p2u'8 p2 p2 p2f8. 8. 8. 8. 8.=%, 8. 8. 8. 8. 8.r5   