o
    ÿÑÐbŸ  ã                   @   sr   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	gZd
ZG dd	„ d	e
ƒZdd„ Zdd„ ZdS )é    N)Úsession)Ú
LocalProxyé   )ÚFlaskIntegration)ÚFlaskRemoteAppé   )Ú	BaseOAuthÚOAuthz_{}_authlib_req_token_c                       sV   e Zd ZdZeZeZd‡ fdd„	Zddd„Z	‡ fdd„Z
dd
d„Z‡ fdd„Z‡  ZS )r	   aø  A Flask OAuth registry for oauth clients.

    Create an instance with Flask::

        oauth = OAuth(app, cache=cache)

    You can also pass the instance of Flask later::

        oauth = OAuth()
        oauth.init_app(app, cache=cache)

    :param app: Flask application instance
    :param cache: A cache instance that has .get .set and .delete methods
    :param fetch_token: a shared function to get current user's token
    :param update_token: a share function to update current user's token
    Nc                    s4   t t| ƒ ||¡ || _|| _|r|  |¡ d S d S ©N)Úsuperr	   Ú__init__ÚappÚcacheÚinit_app©Úselfr   r   Úfetch_tokenÚupdate_token©Ú	__class__© úo/var/www/secure340b-portal/env/lib/python3.10/site-packages/authlib/integrations/flask_client/oauth_registry.pyr       s   ÿzOAuth.__init__c                 C   sD   || _ |dur
|| _|r|| _|r|| _t|di ƒ|_| |jd< dS )zkInitialize lazy for Flask app. This is usually used for Flask application
        factory pattern.
        NÚ
extensionsz!authlib.integrations.flask_client)r   r   r   r   Úgetattrr   r   r   r   r   r   (   s   zOAuth.init_appc                    s   | j stdƒ‚tt| ƒ |¡S )Nz!OAuth is not init with Flask app.)r   ÚRuntimeErrorr   r	   Úcreate_client)r   Únamer   r   r   r   8   s   zOAuth.create_clientFc                    s0   ||fˆj ˆ < ˆjrˆ ˆ ¡S t‡ ‡fdd„ƒS )Nc                      s
   ˆ  ˆ ¡S r
   )r   r   ©r   r   r   r   Ú<lambda>A   s   
 z OAuth.register.<locals>.<lambda>)Ú	_registryr   r   r   ©r   r   Ú	overwriteÚkwargsr   r   r   Úregister=   s   
zOAuth.registerc                    sJ   t t| ƒj||fi |¤Ž}| d¡r#| jrt| j||ƒ |S t||ƒ |S )NZrequest_token_url)r   r	   Úgenerate_client_kwargsÚgetr   Ú_add_cache_request_tokenÚ_add_session_request_tokenr    r   r   r   r$   C   s   

ÿzOAuth.generate_client_kwargs)NNNN)NNN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Zframework_client_clsr   Zframework_integration_clsr   r   r   r#   r$   Ú__classcell__r   r   r   r   r	      s    

c                    sD   |  d¡s‡ ‡fdd„}||d< |  d¡s ‡ ‡fdd„}||d< |S )NÚfetch_request_tokenc                     s6   t  ˆ¡} t | d ¡}|sd S ˆ  |¡}ˆ  |¡ |S r
   )Ú_req_token_tplÚformatr   Úpopr%   Údelete)ÚkeyÚsidÚtoken©r   r   r   r   r-   P   s   


z5_add_cache_request_token.<locals>.fetch_request_tokenÚsave_request_tokenc                    s.   t  ˆ¡}t ¡ j}|t|< ˆ  || d¡ d S )NiX  )r.   r/   ÚuuidÚuuid4Úhexr   Úset)r4   r2   r3   r5   r   r   r6   ]   s   

z4_add_cache_request_token.<locals>.save_request_token©r%   )r   r   r"   r-   r6   r   r5   r   r&   N   s   


r&   c                    s@   |  d¡s‡ fdd„}||d< |  d¡s‡ fdd„}||d< |S )Nr-   c                     s   t  ˆ ¡} t | d ¡S r
   )r.   r/   r   r0   )r2   ©r   r   r   r-   i   ó   
z7_add_session_request_token.<locals>.fetch_request_tokenr6   c                    s   t  ˆ ¡}| t|< d S r
   )r.   r/   r   )r4   r2   r<   r   r   r6   p   r=   z6_add_session_request_token.<locals>.save_request_tokenr;   )r   r"   r-   r6   r   r<   r   r'   g   s   

r'   )r7   Zflaskr   Zwerkzeug.localr   Zintegrationr   Z
remote_appr   Zbase_clientr   Ú__all__r.   r	   r&   r'   r   r   r   r   Ú<module>   s    B