o
    ^[2h                     @   s   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 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   )BaseApp)OAuth1Mixin)OAuth2Mixin)
OAuthError)OpenIDMixin)OAuth1Session)OAuth2Sessionc                   @   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   w/home/skpark/git/infrasmart_work/infrasmart/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_token9   s   



z%FlaskOAuth1App.authorize_access_tokenN)r)   r*   r+   r   
client_clsr<   r   r   r   r   r/   6       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}| jt|d}| j	t|d | 
||}|dd	}|d
d	}|dd}| jdi ||}	|	| _d|	v rd|v r| j|	|d |||d}
|
|	d< |	S )r0   GETerrorerror_description)rA   r3   coder   )rC   r   claims_optionsN
claims_clsleewayx   id_tokennonce)rI   rD   rE   rF   userinfor   )r   methodr   r   r
   formr    r6   r   r8   _format_state_paramsr   r9   r   parse_id_token)r   r   rA   r3   r:   
state_datarD   rE   rF   r   rJ   r   r   r   r<   R   s:   




z%FlaskOAuth2App.authorize_access_tokenN)r)   r*   r+   r   r=   r<   r   r   r   r   r?   O   r>   r?   N)flaskr   r   r   r   base_clientr   r   r	   r
   r   requests_clientr   r   r   r/   r?   r   r   r   r   <module>   s    '