
    Ki1                         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	 ddlm
Z
 ddl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y)    N)generate_token)urlparse)default_user_agent   )MismatchingStateError)MissingRequestTokenError)MissingTokenErrorc                   :    e Zd ZdZdZddZd Zd Zd Zd Z	d Z
y)	BaseAppNc                     t               NNotImplementedError)selfmethodurltokenkwargss        u/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/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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26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3F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4V44r   r   )__name__
__module____qualname__
client_clsOAUTH_APP_CONFIGr   r   r!   r$   r'   r*    r   r   r   r      s+    J$23425r   r   c                       e Zd Zd Zd Zy)_RequestMixinc                 D    | j                   r|r| j                  |      S y y r   )_fetch_token)r   r   s     r   _get_requested_tokenz"_RequestMixin._get_requested_tokenE   s&    $$W-- ")r   c                 b   |j                  dd       }|j                  d      }| j                  r1|j                  d      s t	        j
                  | j                  |      }|r |j                  ||fi |S || j                  |      }|
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S^^4K%L""4#4#4c:C"7??639&99=--g6E=#%%wvs5f55r   N)r+   r,   r-   r5   r=   r0   r   r   r2   r2   D   s    .6r   r2   c                   8    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zy)
OAuth1BaseNc                     || _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        |xs i | _        || _        |xs t        | _        || _        y 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_client   sJ    !$//NND..
262D2D
 )-(8(8%r   )NNNNNNNNNNNNN)r+   r,   r-   r.   rP   rT   r0   r   r   r?   r?   \   s;    J
 ! !Fr   r?   c                   $    e Zd ZddZddZddZy)OAuth1MixinNc                 x    | j                         5 }| j                  |||||      cd d d        S # 1 sw Y   y xY wr   )rT   r=   )r   r   r   r   r   r<   s         r   r   zOAuth1Mixin.request   s?    ##% 	Q++GVS%P	Q 	Q 	Qs   09c                    | j                   st        d      | j                  r|j                  | j                         | j	                         5 }||_        | j                  xs i } |j                  | j                  fi |}t        j                  d|        |j                  | j                   fi |}|d   }ddd       dS # 1 sw Y   xY w)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     !!>??  MM$//0##% 	1".F..4"F6F66t7M7MXQWXMII-m->?@1&11$2D2DOOC!-0E	1 ]UKK	1 	1s   A/CCc                    | j                         5 }|
t               i }|j                  |       |j                  |       ||_        | j                  xs i } |j
                  | j                  fi |}ddd       |S # 1 sw Y   S xY w)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ELL'LL  FL--3F-F--d.C.CNvNE		O 		O s   A%B  B
r   )r+   r,   r-   r   rd   rh   r0   r   r   rV   rV      s    QL,r   rV   c                   d    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZd Zed        Zed        Z	y)	
OAuth2BaseNc                 
   || _         || _        || _        || _        || _        || _        |	| _        |
| _        || _        |xs i | _	        || _
        || _        || _        || _        |xs t        | _        || _        || _        y 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                         |j                  |       | j                  r| j                  |d<   | j                  r| j                  |d<    | j                  d| j
                  | j                  | j                  d|}| j                  r"| j                  D ]  }|j                  |        | j                  r| j                  |       | 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X&6:6H6HM23  .2.C.CM*+!$// 
nn,,..
 	
 ##-- 733A67 ((,(8(8%r   c                 ~    | 
t               | j                  d      }|r||d<   | j                  d      }|r||d<   |S )Ncode_verifierr`   )r   r   )
state_datarf   r   r`   s       r   _format_state_paramszOAuth2Base._format_state_params  sL    '))"7&3F?#!~~n5%1F>"r   c                    i }| j                   r@|j                  d      }|st        d      }||d<   ||d<   t        j	                  d|       |j                  d| j
                        }|r(t        |t        t        f      r|n|j                         nd }|r,d|v r(|j                  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   
isinstancelisttuplesplitrd   )	re   ry   r   rvr   r   r   r   r]   s	            r    _create_oauth2_authorization_urlz+OAuth2Base._create_oauth2_authorization_url  s    ''"JJ7M  .r 2*7'"/BII-m->?@

7FLL1  !u6UEKKM 	
 X&JJw'E&r*"'wBwK4V445KVvV
U5	7	r   )NNNNNNNNNNNNNNNNN)
r+   r,   r-   r.   rP   rw   rT   staticmethodr   r   r0   r   r   rj   rj      sn    J
    #&&P$4    r   rj   c                   2    e Zd ZddZddZd ZddZddZy)	OAuth2MixinNc                     t        | j                        r| j                  |||       | j                  j                  |||       y )N)ru   rv   )callablern   rA   rq   rt   s       r   rw   zOAuth2Mixin._on_update_token/  sN    D&&'+)  
 	##'% 	$ 	
r   c                     | j                         } | j                  di |5 }| j                  |||||      cd d d        S # 1 sw Y   y xY w)Nr0   )load_server_metadatarT   r=   )r   r   r   r   r   r|   r<   s          r   r   zOAuth2Mixin.request<  sT    ,,.#T##/h/ 	Q7++GVS%P	Q 	Q 	Qs   AAc                    | j                   rd| j                  vr | j                  di | j                  5 }|j	                  d| j                   d      }|j                          |j                         }d d d        t        j                         d<   | j                  j                  |       | j                  S # 1 sw Y   GxY w)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_metadataA  s    $$T=Q=Q)Q 64#5#56 ''444T '  %%'99;' &*YY[H\"  ''1###' 's   ?B<<Cc                 R   | j                         }| j                  xs |j                  d      }|st        d      | j                  r|j                  | j                          | j                  di |5 }|||_         | j                  ||fi |cddd       S # 1 sw Y   yxY w)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_urlN  s     ,,.!%!3!3 "
x||$8
 &>??  MM$//0#T##/h/ 	6'&2#8488.28	 	 	s   6BB&c                 `   | j                         }| j                  xs |j                  d      } | j                  di |5 }|||_        i }| j
                  r|j                  | j
                         |j                  |        |j                  |fi |}|cddd       S # 1 sw Y   yxY w)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_tokeng  s     ,,...P(,,?O2P#T##/h/ 	6'&2#F''d667MM&!&F&&~@@E	 	 	s   AB$$B-r   r   )r+   r,   r-   rw   r   r   rd   rh   r0   r   r   r   r   .  s    
Q
$2r   r   )loggingr   authlib.common.securityr   authlib.common.urlsr   authlib.constsr   errorsr   r   r	   	getLoggerr+   rb   r   r2   r?   rV   rj   r   r0   r   r   <module>r      s{      2 ( - ) , %g!25 25j6 60+ +\,- ,^r rjK- Kr   