
    ~h                         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y)    )g)redirect)request)session   )BaseApp)OAuth1Mixin)OAuth2Mixin)
OAuthError)OpenIDMixin)OAuth1Session)OAuth2Sessionc                   T    e Zd Zed        Zej
                  d        Zd Zd ZddZy)FlaskAppMixinc                     d| j                    }t        j                  |      }|r|S | j                  r| j                         }|| _        |S y N_oauth_token_)namer   get_fetch_tokentoken)selfattrr   s      b/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/integrations/flask_client/apps.pyr   zFlaskAppMixin.token   sO    tyyk*dL%%'EDJL     c                 D    d| j                    }t        t        ||       y r   )r   setattrr   )r   r   r   s      r   r   zFlaskAppMixin.token   s    tyyk*4r   c                     | j                   S N)r   )r   argskwargss      r   _get_requested_tokenz"FlaskAppMixin._get_requested_token    s    zzr   c                     |j                  dd       }|r"| j                  j                  t        ||       y 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#   s7    

7D)NN))'5&A455r   Nc                 l     | 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*   sB     +T**<B6B   AlAbA5	""r   r   )	__name__
__module____qualname__propertyr   setterr"   r)   r0   r-   r   r   r   r      s;      \\   6	#r   r   c                       e Zd ZeZd Zy)FlaskOAuth1Appc                    t         j                  j                  d      }|j                  d      }|st	        d      | j
                  j                  t        |      }|st	        d      |d   |d<   |j                  |       | j
                  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

=))JKK~~,,We<)TUU"&"7f''7'''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y)FlaskOAuth2Appc                    t         j                  dk(  rt         j                  j                  d      }|r,t         j                  j                  d      }t	        ||      t         j                  j                  d      t         j                  j                  d      d}n?t         j
                  j                  d      t         j
                  j                  d      d}| j                  j                  t        |j                  d            }| j                  j                  t        |j                  d             | j                  ||      }|j                  dd	      }|j                  d
d	      }|j                  dd      } | j                  di ||}	|	| _        d|	v r"d|v r| j                  |	|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"LL$$W-E%ll../BC u+FF  ((0 ))'2F  ((0 ))'2F
 ^^227FJJw<OP
''G1DE**:v>$4d;ZZd3
Hc*''';&;F;
7j#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]      sS        ! % % $ % + +$# $#N]K 2+]Kg +r   