
    '[fx0                        d dl 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	m
Z
mZ  ej        e          Z G d d          Z G d	 d
          Z G d d          Z G d dee          Z G d d          Z G d dee          ZdS )    N)urlparse)default_user_agent)generate_token   )MismatchingStateErrorMissingRequestTokenErrorMissingTokenErrorc                   <    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
dS )	BaseAppNc                     t                      NNotImplementedError)selfmethodurltokenkwargss        ]/var/www/piapp/venv/lib/python3.11/site-packages/authlib/integrations/base_client/sync_app.pyrequestzBaseApp.request       !###    c                       | j         d|fi |S )zInvoke GET http request.

        If ``api_base_url`` configured, shortcut is available::

            client.get('users/lepture')
        GETr   r   r   r   s      r   getzBaseApp.get         t|E311&111r   c                       | j         d|fi |S )zInvoke POST http request.

        If ``api_base_url`` configured, shortcut is available::

            client.post('timeline', json={'text': 'Hi'})
        POSTr   r   s      r   postzBaseApp.post   s      t|FC226222r   c                       | j         d|fi |S )zInvoke PATCH http request.

        If ``api_base_url`` configured, shortcut is available::

            client.patch('profile', json={'name': 'Hsiaoming Yang'})
        PATCHr   r   s      r   patchzBaseApp.patch(   s      t|GS33F333r   c                       | j         d|fi |S )zInvoke PUT http request.

        If ``api_base_url`` configured, shortcut is available::

            client.put('profile', json={'name': 'Hsiaoming Yang'})
        PUTr   r   s      r   putzBaseApp.put1   r   r   c                       | j         d|fi |S )zInvoke DELETE http request.

        If ``api_base_url`` configured, shortcut is available::

            client.delete('posts/123')
        DELETEr   r   s      r   deletezBaseApp.delete:   s      t|Hc44V444r   r   )__name__
__module____qualname__
client_clsOAUTH_APP_CONFIGr   r   r!   r$   r'   r*    r   r   r   r      s~        J$ $ $ $2 2 23 3 34 4 42 2 25 5 5 5 5r   r   c                       e Zd Zd Zd ZdS )_RequestMixinc                 F    | j         r|r|                      |          S d S d S r   )_fetch_token)r   r   s     r   _get_requested_tokenz"_RequestMixin._get_requested_tokenE   s<     	. 	.$$W---	. 	. 	. 	.r   c                 `   |                     dd           }|                    d          }| j        r/|                    d          st	          j        | j        |          }|r |j        ||fi |S ||                     |          }|t                      ||_	         |j        ||fi |S )Nr   withhold_token)zhttps://zhttp://)
popr   api_base_url
startswithr   urljoinr   r5   r	   r   )r   sessionr   r   r   r   r   r7   s           r   _send_token_requestz!_RequestMixin._send_token_requestI   s    **Y--$455 	;S^^4K%L%L 	;"4#4c::C 	:"7?6399&999=--g66E=#%%%wvs55f555r   N)r+   r,   r-   r5   r=   r0   r   r   r2   r2   D   s2        . . .6 6 6 6 6r   r2   c                   ,    e Zd ZdZ	 	 	 	 	 	 ddZd ZdS )
OAuth1BaseNc                     || _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        |pi | _        || _        |pt          | _        || _        d S r   )	frameworkname	client_idclient_secretrequest_token_urlrequest_token_paramsaccess_token_urlaccess_token_paramsauthorize_urlauthorize_paramsr9   client_kwargsr4   r   _user_agent_kwargs)r   rA   rB   fetch_tokenrC   rD   rE   rF   rG   rH   rI   rJ   r9   rK   
user_agentr   s                   r   __init__zOAuth1Base.__init___   s     #	"*!2$8! 0#6 * 0(*0b'%;);r   c                 `     | j         | j        | j        fi | j        }| j        |j        d<   |S )N
User-Agent)r.   rC   rD   rK   rL   headers)r   r<   s     r   _get_oauth_clientzOAuth1Base._get_oauth_clientw   s9    !$/$.$2D[[HZ[[(,(8%r   )NNNNNNNNNNNNN)r+   r,   r-   r.   rP   rT   r0   r   r   r?   r?   \   sP        J 59*.9=7;15>B   0    r   r?   c                   &    e Zd ZddZddZddZdS )OAuth1MixinNc                     |                                  5 }|                     |||||          cd d d            S # 1 swxY w Y   d S r   )rT   r=   )r   r   r   r   r   r<   s         r   r   zOAuth1Mixin.request~   s    ##%% 	Q++GVS%PP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   ;??c                    | j         st          d          | j        r|                    | j                   |                                 5 }||_        | j        pi } |j        | j        fi |}t          
                    d|            |j        | j         fi |}|d         }ddd           n# 1 swxY 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" valuezFetch request token: oauth_tokenN)r   request_tokenstate)rI   RuntimeErrorrJ   updaterT   redirect_urirF   fetch_request_tokenrE   logdebugcreate_authorization_url)r   r`   r   clientparamsr\   r   r]   s           r   rd   z$OAuth1Mixin.create_authorization_url   s*    ! 	@>???  	1MM$/000##%% 	1".F.4"F6F6t7MXXQWXXMII?m??@@@1&1$2DOOOOC!-0E	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 ]UKKKs   AB44B8;B8c                    |                                  5 }|t                      i }|                    |           |                    |           ||_        | j        pi } |j        | j        fi |}ddd           n# 1 swxY w 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)rT   r   r_   r   rH   fetch_access_tokenrG   )r   r\   r   re   r   rf   s         r   rh   zOAuth1Mixin.fetch_access_token   s     ##%% 		O$.000ELL'''LL    FL-3F-F-d.CNNvNNE		O 		O 		O 		O 		O 		O 		O 		O 		O 		O 		O 		O 		O 		O 		O s   A BBBr   )r+   r,   r-   r   rd   rh   r0   r   r   rV   rV   }   sX        Q Q Q QL L L L,     r   rV   c                   `    e Zd ZdZ	 	 	 	 	 	 ddZddZd Zed             Zed             Z	dS )	
OAuth2BaseNc                    || _         || _        || _        || _        || _        || _        |	| _        |
| _        || _        |pi | _	        || _
        || _        || _        || _        |pt          | _        || _        || _        d S r   )rA   rB   rC   rD   rG   rH   rI   rJ   r9   rK   compliance_fixclient_auth_methodsr4   _update_tokenr   rL   _server_metadata_urlserver_metadata)r   rA   rB   rN   update_tokenrC   rD   rG   rH   rI   rJ   r9   rK   server_metadata_urlrl   rm   rO   r   s                     r   rP   zOAuth2Base.__init__   s     #	"* 0#6 * 0(*0b,#6 ')%;);$7!%r   c                     t                      r   r   r   r   refresh_tokenaccess_tokens       r   _on_update_tokenzOAuth2Base._on_update_token   r   r   c                    i }|                     | j                   |                     |           | j        r
| j        |d<   | j        r
| j        |d<    | j        d| j        | j        | j        d|}| j        r| j        D ]}|	                    |           | j
        r| 
                    |           | j        |j        d<   |S )Nauthorization_endpointtoken_endpoint)rC   rD   rq   rR   r0   )r_   rK   rI   rG   r.   rC   rD   rw   rm   register_client_auth_methodrl   rL   rS   )r   metadatarK   r<   fs        r   rT   zOAuth2Base._get_oauth_client   s   T/000X&&& 	I6:6HM23  	D.2.CM*+!$/ 
n,.
 
 	
 
 # 	7- 7 733A6666 	)((((,(8%r   c                     | t                      |                     d          }|r||d<   |                     d          }|r||d<   |S )Ncode_verifierr`   )r   r   )
state_datarf   r   r`   s       r   _format_state_paramszOAuth2Base._format_state_params   s_    ')))"77 	4&3F?#!~~n55 	2%1F>"r   c                    i }| j         rM|                    d          }|st          d          }||d<   ||d<   t                              d|           |                    d| j                  }|rFd|                                v r0|                    d          }|st          d          }||d<   ||d<    | j        |fi |\  }}||d<   ||d	<   |S )
Nr   0   zUsing code_verifier: scopeopenidnonce   r   r]   )code_challenge_methodr   r   rb   rc   r   splitrd   )	re   ry   r   rvr   r   r   r   r]   s	            r    _create_oauth2_authorization_urlz+OAuth2Base._create_oauth2_authorization_url   s   ' 	A"JJ77M  8 .r 2 2*7'"/BII?m??@@@

7FL11 	 X..JJw''E (&r**"'wBwK4V4". .&,. .
U5	7	r   )NNNNNNNNNNNNNNNNN)
r+   r,   r-   r.   rP   rw   rT   staticmethodr   r   r0   r   r   rj   rj      s        J HL*.7;15GKFJ& & & &6$ $ $ $  4   \   \  r   rj   c                   4    e Zd ZddZddZd ZddZddZdS )	OAuth2MixinNc                     t          | j                  r|                     |||           | j                            |||           d S )N)ru   rv   )callablern   rA   rq   rt   s       r   rw   zOAuth2Mixin._on_update_token  so    D&'' 	+)    
 	##'% 	$ 	
 	
 	
 	
 	
r   c                     |                                  } | j        di |5 }|                     |||||          cd d d            S # 1 swxY w Y   d S )Nr0   )load_server_metadatarT   r=   )r   r   r   r   r   r|   r<   s          r   r   zOAuth2Mixin.request  s    ,,..#T#//h// 	Q7++GVS%PP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   AAAc                 n   | j         rd| j        vr | j        di | j        5 }|                    d| j         d          }|                                 |                                }d d d            n# 1 swxY w Y   t          j                    |d<   | j                            |           | j        S )N
_loaded_atr   T)r7   r0   )	ro   rp   r.   rK   r   raise_for_statusjsontimer_   )r   r<   respr|   s       r   r   z OAuth2Mixin.load_server_metadata#  s    $ 	2T=Q)Q)Q 664#566 ''ud.GX\]]%%'''99;;' ' ' ' ' ' ' ' ' ' ' ' ' ' '
 &*Y[[H\" ''111##s   AA55A9<A9c                 D   |                                  }| j        p|                    d          }|st          d          | j        r|                    | j                    | j        di |5 }|||_         | j        ||fi |cddd           S # 1 swxY w Y   dS )rY   ry   rZ   Nr0   )	r   rI   r   r^   rJ   r_   rT   r`   r   )r   r`   r   r|   ry   re   s         r   rd   z$OAuth2Mixin.create_authorization_url.  s    ,,..!%!3!]x||D\7]7]% 	@>???  	1MM$/000 $T#//h// 	:6'&2#848.: :28: :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   0BBBc                 R   |                                  }| j        p|                    d          } | j        di |5 }|||_        i }| j        r|                    | j                   |                    |            |j        |fi |}|cddd           S # 1 swxY w Y   d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.
        rz   Nr0   )r   rG   r   rT   r`   rH   r_   rN   )r   r`   r   r|   rz   re   rf   r   s           r   rh   zOAuth2Mixin.fetch_access_tokenE  s    ,,...P(,,?O2P2P#T#//h// 	6'&2#F' 8d6777MM&!!!&F&~@@@@E	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ABB #B r   r   )r+   r,   r-   rw   r   r   rd   rh   r0   r   r   r   r     sw        
 
 
 
Q Q Q Q
	$ 	$ 	$: : : :.     r   r   )r   loggingauthlib.common.urlsr   authlib.constsr   authlib.common.securityr   errorsr   r   r	   	getLoggerr+   rb   r   r2   r?   rV   rj   r   r0   r   r   <module>r      s     ( ( ( ( ( ( - - - - - - 2 2 2 2 2 2          g!!25 25 25 25 25 25 25 25j6 6 6 6 6 6 6 60       B, , , , ,- , , ,^a a a a a a a aHG G G G G- G G G G Gr   