o
    Df{                     @   s4   d dl Z dd Zdd Zdd Zdd	 Zd
d ZdS )    Nc                        fdd}|S )zCreate an ``query_client`` function that can be used in authorization
    server.

    :param session: SQLAlchemy session
    :param client_model: Client model class
    c                    s     }|j| d S )N)	client_idquery	filter_byfirst)r   qclient_modelsession c/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/integrations/sqla_oauth2/functions.pyquery_client      
z.create_query_client_func.<locals>.query_clientr   )r   r
   r   r   r	   r   create_query_client_func   s   r   c                    r   )zCreate an ``save_token`` function that can be used in authorization
    server.

    :param session: SQLAlchemy session
    :param token_model: Token model class
    c                    sH   |j r	|j  }nd }|j}d|j|d| } |    d S )N)r   user_idr   )userget_user_idclientr   addcommit)tokenrequestr   r   itemr   token_modelr   r   
save_token   s   
z*create_save_token_func.<locals>.save_tokenr   )r   r   r   r   r   r   create_save_token_func   s   r   c                    r   )zCreate an ``query_token`` function for revocation, introspection
    token endpoints.

    :param session: SQLAlchemy session
    :param token_model: Token model class
    c                    sb     }|dkr|j| d S |dkr|j| d S |j| d }|r)|S |j| d S )Naccess_tokenr   refresh_token)r    r   )r   token_type_hintr   r   r   r   r   query_token/   s   
z,create_query_token_func.<locals>.query_tokenr   )r   r   r"   r   r   r   create_query_token_func(   s   r#   c                    s0   ddl m} t| G  fddd|}|S )zCreate a revocation endpoint class with SQLAlchemy session
    and token model.

    :param session: SQLAlchemy session
    :param token_model: Token model class
    r   )RevocationEndpointc                       s$   e Zd Z fddZfddZdS )z7create_revocation_endpoint.<locals>._RevocationEndpointc                    s
    ||S )Nr   )selfr   r!   )r"   r   r   r"   H   s   
zCcreate_revocation_endpoint.<locals>._RevocationEndpoint.query_tokenc                    sB   t t }|jd}||_|dkr||_ |    d S )Nr!   r   )inttimeformgetaccess_token_revoked_atrefresh_token_revoked_atr   r   )r%   r   r   nowhint)r   r   r   revoke_tokenK   s   
zDcreate_revocation_endpoint.<locals>._RevocationEndpoint.revoke_tokenN)__name__
__module____qualname__r"   r.   r   r"   r   r   r   _RevocationEndpointG   s    r3   )authlib.oauth2.rfc7009r$   r#   )r   r   r$   r3   r   r2   r   create_revocation_endpoint=   s   
r5   c                    s&   ddl m} G  fddd|}|S )zCreate an bearer token validator class with SQLAlchemy session
    and token model.

    :param session: SQLAlchemy session
    :param token_model: Token model class
    r   )BearerTokenValidatorc                       s   e Zd Z fddZdS )z<create_bearer_token_validator.<locals>._BearerTokenValidatorc                    s     }|j|d S )Nr   r   )r%   token_stringr   r   r   r   authenticate_tokena   r   zOcreate_bearer_token_validator.<locals>._BearerTokenValidator.authenticate_tokenN)r/   r0   r1   r8   r   r   r   r   _BearerTokenValidator`   s    r9   )authlib.oauth2.rfc6750r6   )r   r   r6   r9   r   r   r   create_bearer_token_validatorW   s   r;   )r'   r   r   r#   r5   r;   r   r   r   r   <module>   s    