
    !<i                         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 d          Z G d deee          Z G d deee
e          ZdS )    )g)redirect)request)session   )BaseApp)OAuth1Mixin)OAuth2Mixin)
OAuthError)OpenIDMixin)OAuth1Session)OAuth2Sessionc                   X    e Zd Zed             Zej        d             Zd Zd ZddZdS )FlaskAppMixinc                     d| j          }t          j        |          }|r|S | j        r|                                 }|| _        |S d S N_oauth_token_)namer   get_fetch_tokentoken)selfattrr   s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/authlib/integrations/flask_client/apps.pyr   zFlaskAppMixin.token   s]    *ty**d 	L 	%%''EDJL	 	    c                 F    d| j          }t          t          ||           d S r   )r   setattrr   )r   r   r   s      r   r   zFlaskAppMixin.token   s)    *ty**4r   c                     | j         S N)r   )r   argskwargss      r   _get_requested_tokenz"FlaskAppMixin._get_requested_token    s
    zr   c                     |                     dd           }|r#| j                            t          ||           d S t	          d          )NstatezMissing state value)pop	frameworkset_state_datar   RuntimeError)r   r!   r$   s      r   save_authorize_dataz!FlaskAppMixin.save_authorize_data#   sL    

7D)) 	6N))'5&AAAAA4555r   Nc                 f     | j         |fi |} | j        dd|i| t          |d                   S )zCreate a HTTP Redirect for Authorization Endpoint.

        :param redirect_uri: Callback or redirect URI for authorization.
        :param kwargs: Extra parameters to include.
        :return: A HTTP redirect response.
        redirect_uriurl )create_authorization_urlr)   r   )r   r+   r!   rvs       r   authorize_redirectz FlaskAppMixin.authorize_redirect*   sN     +T*<BB6BB  AAlAbAAA5	"""r   r   )	__name__
__module____qualname__propertyr   setterr"   r)   r0   r-   r   r   r   r      s|          X \    \   6 6 6	# 	# 	# 	# 	# 	#r   r   c                       e Zd ZeZd ZdS )FlaskOAuth1Appc                    t           j                            d          }|                    d          }|st	          d          | j                            t          |          }|st	          d          |d         |d<   |                    |           | j        	                    t          |            | j
        di |}|| _        |S )	HFetch access token in one step.

        :return: A token dict.
        T)flatoauth_tokenzMissing "oauth_token" parameter)descriptionz)Missing "request_token" in temporary datarequest_tokenr-   )r   r    to_dictr   r   r&   get_state_datar   updateclear_state_datafetch_access_tokenr   )r   r!   paramsr$   datar   s         r   authorize_access_tokenz%FlaskOAuth1App.authorize_access_token9   s    
 %%4%00

=)) 	L)JKKKK~,,We<< 	V)TUUUU"&"7f''777''11&11
r   N)r1   r2   r3   r   
client_clsrE   r-   r   r   r7   r7   6   s(        J    r   r7   c                       e Zd ZeZd ZdS )FlaskOAuth2Appc                    t           j        dk    rt           j                            d          }|r0t           j                            d          }t	          ||          t           j                            d          t           j                            d          d}n?t           j                            d          t           j                            d          d}| j                            t          |                    d                    }| j        	                    t          |                    d                     | 
                    ||          }|                    dd	          }|                    d
d	          }|                    dd          } | j        di ||}	|	| _        d|	v r)d|v r%|                     |	|d         |||          }
|
|	d<   |	S )r9   GETerrorerror_description)rK   r<   coder$   )rM   r$   claims_optionsN
claims_clsleewayx   id_tokennonce)rS   rN   rO   rP   userinfor-   )r   methodr    r   r   formr&   r?   r   rA   _format_state_paramsr%   rB   r   parse_id_token)r   r!   rK   r<   rC   
state_datarN   rO   rP   r   rT   s              r   rE   z%FlaskOAuth2App.authorize_access_tokenR   s   
 >U""L$$W--E G%l../BCC u+FFFF  ((00 ))'22 FF  ((00 ))'22 F
 ^227FJJw<O<OPP
''G1D1DEEE**:v>>$4d;;ZZd33
Hc**'';;&;F;;
7j#8#8** )-% +  H !)E*r   N)r1   r2   r3   r   rF   rE   r-   r   r   rH   rH   O   s(        J( ( ( ( (r   rH   N)flaskr   r   r   r   base_clientr   r	   r
   r   r   requests_clientr   r   r   r7   rH   r-   r   r   <module>r]      s\                           ! ! ! ! ! ! % % % % % % % % % % % % $ $ $ $ $ $ % % % % % % + + + + + + + + + + + +$# $# $# $# $# $# $# $#N    ]K   2+ + + + +]Kg + + + + +r   