
    k7i1                         S SK r S SKrS SKJr  S SKJr  S SKJr  SSKJ	r	  SSKJ
r
  SSKJr  \ R                  " \5      r " S	 S
5      r " S S5      r " S S5      r " S S\\5      r " S S5      r " S S\\5      rg)    N)generate_token)urlparse)default_user_agent   )MismatchingStateError)MissingRequestTokenError)MissingTokenErrorc                   D    \ rS rSrSrSrS
S jrS rS rS r	S r
S rS	rg)BaseApp   Nc                     [        5       eNNotImplementedError)selfmethodurltokenkwargss        c/home/james-whalen/.local/lib/python3.13/site-packages/authlib/integrations/base_client/sync_app.pyrequestBaseApp.request       !##    c                 *    U R                   " SU40 UD6$ )zsInvoke GET http request.

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

    client.get("users/lepture")
GETr   r   r   r   s      r   getBaseApp.get        ||E31&11r   c                 *    U R                   " SU40 UD6$ )zInvoke POST http request.

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

    client.post("timeline", json={"text": "Hi"})
POSTr   r   s      r   postBaseApp.post   s     ||FC2622r   c                 *    U R                   " SU40 UD6$ )zInvoke PATCH http request.

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

    client.patch("profile", json={"name": "Hsiaoming Yang"})
PATCHr   r   s      r   patchBaseApp.patch(   s     ||GS3F33r   c                 *    U R                   " SU40 UD6$ )zInvoke PUT http request.

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

    client.put("profile", json={"name": "Hsiaoming Yang"})
PUTr   r   s      r   putBaseApp.put1   r!   r   c                 *    U R                   " SU40 UD6$ )zuInvoke DELETE http request.

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

    client.delete("posts/123")
DELETEr   r   s      r   deleteBaseApp.delete:   s     ||Hc4V44r    r   )__name__
__module____qualname____firstlineno__
client_clsOAUTH_APP_CONFIGr   r   r$   r(   r,   r0   __static_attributes__r2   r   r   r   r      s+    J$23425r   r   c                        \ rS rSrS rS rSrg)_RequestMixinD   c                 X    U R                   (       a  U(       a  U R                  U5      $ g g r   )_fetch_token)r   r   s     r   _get_requested_token"_RequestMixin._get_requested_tokenE   s&    $$W-- ")r   c                    UR                  SS 5      nUR                  S5      nU R                  (       a7  UR                  S5      (       d!  [        R
                  " U R                  U5      nU(       a  UR                  " X#40 UD6$ Uc  U R                  U5      nUc
  [        5       eXAl	        UR                  " X#40 UD6$ )Nr   withhold_token)zhttps://zhttp://)
popr   api_base_url
startswithr   urljoinr   r?   r	   r   )r   sessionr   r   r   r   r   rB   s           r   _send_token_request!_RequestMixin._send_token_requestI   s    **Y-$45S^^4K%L%L""4#4#4c:C??69&99=--g6E=#%%v5f55r   r2   N)r3   r4   r5   r6   r?   rH   r9   r2   r   r   r;   r;   D   s    .6r   r;   c                   B    \ rS rSrSr             SS jrS rSrg)
OAuth1Base\   Nc                     Xl         X l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl        Xl	        Xl
        U=(       d    0 U l        X0l        U=(       d    [        U l        Xl        g r   )	frameworkname	client_idclient_secretrequest_token_urlrequest_token_paramsaccess_token_urlaccess_token_paramsauthorize_urlauthorize_paramsrD   client_kwargsr>   r   _user_agent_kwargs)r   rN   rO   fetch_tokenrP   rQ   rR   rS   rT   rU   rV   rW   rD   rX   
user_agentr   s                   r   __init__OAuth1Base.__init___   si    $ #	"*!2$8! 0#6 * 0(*0b'%;);r   c                     U R                   " U R                  U R                  40 U R                  D6nU R                  UR
                  S'   U$ )N
User-Agent)r7   rP   rQ   rX   rY   headers)r   rG   s     r   _get_oauth_clientOAuth1Base._get_oauth_client   sH    //NND..
262D2D
 )-(8(8%r   )r>   rZ   rY   rU   rT   rD   rW   rV   rP   rX   rQ   rN   rO   rS   rR   )NNNNNNNNNNNNN)r3   r4   r5   r6   r7   r]   rb   r9   r2   r   r   rK   rK   \   s;    J
 ! !Fr   rK   c                   2    \ rS rSrSS jrSS jrSS jrSrg)OAuth1Mixin   Nc                 ~    U R                  5        nU R                  XQX#U5      sS S S 5        $ ! , (       d  f       g = fr   )rb   rH   )r   r   r   r   r   rG   s         r   r   OAuth1Mixin.request   s.    ##%++GSP &%%s   .
<c                    U R                   (       d  [        S5      eU R                  (       a  UR                  U R                  5        U R	                  5        nXl        U R                  =(       d    0 nUR                  " U R                  40 UD6n[        R                  SU< 35        UR                  " U R                   40 UD6nUS   nSSS5        WWWS.$ ! , (       d  f       N= f)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)rV   RuntimeErrorrW   updaterb   redirect_urirS   fetch_request_tokenrR   logdebugcreate_authorization_url)r   rq   r   clientparamsrm   r   rn   s           r   ru   $OAuth1Mixin.create_authorization_url   s     !!>??  MM$//0##%"...4"F"66t7M7MXQWXMII-m->?@11$2D2DOOC!-0E & ]UKK &%s   A4C
C)c                 .   U R                  5        nUc
  [        5       e0 nUR                  U5        UR                  U5        XCl        U R                  =(       d    0 nUR
                  " U R                  40 UD6nSSS5        U$ ! , (       d  f       W$ = f)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)rb   r   rp   r   rU   fetch_access_tokenrT   )r   rm   r   rv   r   rw   s         r   rz   OAuth1Mixin.fetch_access_token   s     ##%$.00ELL'LL  L--3F--d.C.CNvNE &  &% s   A*B
Br2   r   )r3   r4   r5   r6   r   ru   rz   r9   r2   r   r   re   re      s    QL,r   re   c                   p    \ rS rSrSr               S	S jrS
S jrS r\S 5       r	\S 5       r
Srg)
OAuth2Base   Nc                    Xl         X l        XPl        X`l        Xpl        Xl        Xl        Xl        Xl        U=(       d    0 U l	        Xl
        Xl        X0l        X@l        U=(       d    [        U l        Xl        UU l        g r   )rN   rO   rP   rQ   rT   rU   rV   rW   rD   rX   compliance_fixclient_auth_methodsr>   _update_tokenr   rY   _server_metadata_urlserver_metadata)r   rN   rO   r[   update_tokenrP   rQ   rT   rU   rV   rW   rD   rX   server_metadata_urlr   r   r\   r   s                     r   r]   OAuth2Base.__init__   sx    ( #	"* 0#6 * 0(*0b,#6 ')%;);$7!%r   c                     [        5       er   r   r   r   refresh_tokenaccess_tokens       r   _on_update_tokenOAuth2Base._on_update_token   r   r   c                 *   0 nUR                  U R                  5        UR                  U5        U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U R                  " SU R
                  U R                  U R                  S.UD6nU R                  (       a$  U R                   H  nUR                  U5        M     U R                  (       a  U R                  U5        U R                  UR                  S'   U$ )Nauthorization_endpointtoken_endpoint)rP   rQ   r   r`   r2   )rp   rX   rV   rT   r7   rP   rQ   r   r   register_client_auth_methodr   rY   ra   )r   metadatarX   rG   fs        r   rb   OAuth2Base._get_oauth_client   s    T//0X&6:6H6HM23  .2.C.CM*+// 
nn,,..
 	
 ##--33A6 . ((,(8(8%r   c                     U c
  [        5       eU R                  S5      nU(       a  X!S'   U R                  S5      nU(       a  X1S'   U$ )Ncode_verifierrq   )r   r   )
state_datarw   r   rq   s       r   _format_state_paramsOAuth2Base._format_state_params  sH    '))"7&3?#!~~n5%1>"r   c                    0 nU R                   (       aD  UR                  S5      nU(       d  [        S5      nXBS'   XCS'   [        R	                  SU< 35        UR                  SU R
                  5      nU(       a-  [        U[        [        45      (       a  UOUR                  5       OS nU(       a1  SU;   a+  UR                  S5      nU(       d  [        S5      nXbS'   XcS'   U R                  " U40 UD6u  pxXsS'   XS	'   U$ )
Nr   0   zUsing code_verifier: scopeopenidnonce   r   rn   )code_challenge_methodr   r   rs   rt   r   
isinstancelisttuplesplitru   )	rv   r   r   rvr   r   r   r   rn   s	            r    _create_oauth2_authorization_url+OAuth2Base._create_oauth2_authorization_url  s    ''"JJ7M  .r 2*7'"/II-m->?@

7FLL1  !u66UEKKM 	
 X&JJw'E&r*"'wwK445KVvV
5	7	r   )r>   r   r   rY   rU   rT   rD   rW   rV   r   rP   rX   rQ   r   rN   rO   r   )NNNNNNNNNNNNNNNNN)r3   r4   r5   r6   r7   r]   r   rb   staticmethodr   r   r9   r2   r   r   r}   r}      sn    J
    #&&P$4    r   r}   c                   B    \ rS rSrS	S jrS
S jrS rS
S jrS
S jrSr	g)OAuth2Mixini.  Nc                     [        U R                  5      (       a  U R                  UUUS9  U R                  R                  UUUS9  g )N)r   r   )callabler   rN   r   r   s       r   r   OAuth2Mixin._on_update_token/  sQ    D&&''+)  
 	##'% 	$ 	
r   c                     U R                  5       nU R                  " S0 UD6 nU R                  XaX#U5      sS S S 5        $ ! , (       d  f       g = f)Nr2   )load_server_metadatarb   rH   )r   r   r   r   r   r   rG   s          r   r   OAuth2Mixin.request<  sA    ,,.##/h/7++GSP 0//s   A  
Ac                    U R                   (       a  SU R                  ;  a  U R                  " S0 U R                  D6 nUR	                  SU R                   SS9nUR                  5         UR                  5       nS S S 5        [        R                  " 5       WS'   U R                  R                  U5        U R                  $ ! , (       d  f       NM= f)N
_loaded_atr   T)rB   r2   )	r   r   r7   rX   r   raise_for_statusjsontimerp   )r   rG   respr   s       r   r    OAuth2Mixin.load_server_metadataA  s    $$T=Q=Q)Q64#5#56'444T '  %%'99; 7 &*YY[H\"  ''1### 76s   <C
Cc                 x   U R                  5       nU R                  =(       d    UR                  S5      nU(       d  [        S5      eU R                  (       a  UR                  U R                  5        U R                  " S0 UD6 nUb  Xl        U R                  " XT40 UD6sSSS5        $ ! , (       d  f       g= f)rj   r   rk   Nr2   )	r   rV   r   ro   rW   rp   rb   rq   r   )r   rq   r   r   r   rv   s         r   ru   $OAuth2Mixin.create_authorization_urlN  s     ,,.!%!3!3 "
x||$8
 &>??  MM$//0##/h/6'&2#8828 0//s   B++
B9c                 ~   U R                  5       nU R                  =(       d    UR                  S5      nU R                  " S0 UD6 nUb  Xl        0 nU R
                  (       a  UR                  U R
                  5        UR                  U5        UR                  " U40 UD6nUsSSS5        $ ! , (       d  f       g= f)zFetch 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.
r   Nr2   )r   rT   r   rb   rq   rU   rp   r[   )r   rq   r   r   r   rv   rw   r   s           r   rz   OAuth2Mixin.fetch_access_tokeng  s     ,,...P(,,?O2P##/h/6'&2#F''d667MM&!&&~@@E 0//s   AB..
B<r2   r   r   )
r3   r4   r5   r6   r   r   r   ru   rz   r9   r2   r   r   r   r   .  s    
Q
$2r   r   )loggingr   authlib.common.securityr   authlib.common.urlsr   authlib.constsr   errorsr   r   r	   	getLoggerr3   rs   r   r;   rK   re   r}   r   r2   r   r   <module>r      sy      2 ( - ) , %!25 25j6 60+ +\,- ,^r rjK- Kr   