o
    Df                     @   s   G d d dZ dS )c                   @   s`   e Zd ZdZdZdddddZ		dddZdd	 Zed
d Z			dddZ
		dddZdS )BearerTokenGeneratora  Bearer token generator which can create the payload for token response
    by OAuth 2 server. A typical token response would be:

    .. code-block:: http

        HTTP/1.1 200 OK
        Content-Type: application/json;charset=UTF-8
        Cache-Control: no-store
        Pragma: no-cache

        {
            "access_token":"mF_9.B5f-4.1JqM",
            "token_type":"Bearer",
            "expires_in":3600,
            "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
        }
    i  i / )authorization_codeimplicitpasswordclient_credentialsNc                 C   s   || _ || _|| _d S N)access_token_generatorrefresh_token_generatorexpires_generator)selfr   r   r	    r   U/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/oauth2/rfc6750/token.py__init__   s   
zBearerTokenGenerator.__init__c                 C   sX   | j d u r| j|| j}|S t| j r|  ||}|S t| j tr'| j }|S | j}|S r   )r	   GRANT_TYPES_EXPIRES_INgetDEFAULT_EXPIRES_INcallable
isinstanceint)r
   client
grant_type
expires_inr   r   r   _get_expires_in%   s   

z$BearerTokenGenerator._get_expires_inc                 C   s   |r|  |}|S r   )get_allowed_scope)r   scoper   r   r   r   1   s   
z&BearerTokenGenerator.get_allowed_scopeTc           	      C   sx   |  ||}| j||||d}|du r| ||}d|d}|r$||d< |r4| jr4| j||||d|d< |r:||d< |S )a  Generate a bearer token for OAuth 2.0 authorization token endpoint.

        :param client: the client that making the request.
        :param grant_type: current requested grant_type.
        :param user: current authorized user.
        :param expires_in: if provided, use this value as expires_in.
        :param scope: current requested scope.
        :param include_refresh_token: should refresh_token be included.
        :return: Token dict
        )r   r   userr   NBearer)
token_typeaccess_tokenr   refresh_tokenr   )r   r   r   r   )	r
   r   r   r   r   r   include_refresh_tokenr   tokenr   r   r   generate7   s$   

zBearerTokenGenerator.generatec                 C   s   |  ||||||S r   )r!   )r
   r   r   r   r   r   r   r   r   r   __call__V   s   zBearerTokenGenerator.__call__)NN)NNNT)__name__
__module____qualname____doc__r   r   r   r   staticmethodr   r!   r"   r   r   r   r   r      s(    


r   N)r   r   r   r   r   <module>   s    