o
    Df                     @   s   d dl mZmZmZmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZ G dd dZG dd deee	ZG d	d
 d
eeee	ZdS )    )gredirectrequestsession   )OAuth1SessionOAuth2Session)BaseApp
OAuthErrorOAuth1MixinOAuth2MixinOpenIDMixinc                   @   s@   e Zd Zedd Zejdd Zdd Zdd Zdd	d
ZdS )FlaskAppMixinc                 C   s:   d| j  }t|}|r|S | jr|  }|| _|S d S N_oauth_token_)namer   get_fetch_tokentoken)selfattrr    r   _/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/flask_client/apps.pyr   
   s   
zFlaskAppMixin.tokenc                 C   s   d| j  }tt|| d S r   )r   setattrr   )r   r   r   r   r   r   r      s   c                 O   s   | j S N)r   )r   argskwargsr   r   r   _get_requested_token   s   z"FlaskAppMixin._get_requested_tokenc                 K   s,   | dd }|r| jt|| d S td)NstatezMissing state value)pop	frameworkset_state_datar   RuntimeError)r   r   r   r   r   r   save_authorize_data   s   z!FlaskAppMixin.save_authorize_dataNc                 K   s2   | 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urlNr   )create_authorization_urlr#   r   )r   r$   r   rvr   r   r   authorize_redirect$   s   z FlaskAppMixin.authorize_redirectr   )	__name__
__module____qualname__propertyr   setterr   r#   r(   r   r   r   r   r   	   s    


r   c                   @      e Zd ZeZdd ZdS )FlaskOAuth1Appc                 K   s   t jjdd}|d}|stdd| jt|}|s!td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_tokenNr   )r   r   to_dictr   r
   r    get_state_datar   updateclear_state_datafetch_access_tokenr   )r   r   paramsr   datar   r   r   r   authorize_access_token3   s   



z%FlaskOAuth1App.authorize_access_tokenN)r)   r*   r+   r   
client_clsr<   r   r   r   r   r/   0       r/   c                   @   r.   )FlaskOAuth2Appc           	      K   s   t jdkr&t jd}|rt jd}t||dt jd t jdd}nt jd t jdd}|dd	}| jt	|d}| j
t	|d | ||}| jdi ||}|| _d
|v rud|v ru| j||d |d}||d< |S )r0   GETerrorerror_description)rA   r3   coder   )rC   r   claims_optionsNid_tokennonce)rF   rD   userinfor   )r   methodr   r   r
   formr   r    r6   r   r8   _format_state_paramsr9   r   parse_id_token)	r   r   rA   r3   r:   rD   
state_datar   rG   r   r   r   r<   L   s*   


z%FlaskOAuth2App.authorize_access_tokenN)r)   r*   r+   r   r=   r<   r   r   r   r   r?   I   r>   r?   N)flaskr   r   r   r   requests_clientr   r   base_clientr	   r
   r   r   r   r   r/   r?   r   r   r   r   <module>   s    '