
    ~h8                     8    d dl Z d dlmZ d dlmZ  G d d      Zy)    N)	to_native)jwtc                   \    e Zd ZdZdZd
dZed        Zed        ZddZ	ddZ
	 	 	 	 dd	Zy)JWTBearerTokenGeneratora#  A JSON Web Token formatted bearer token generator for jwt-bearer grant type.
    This token generator can be registered into authorization server::

        authorization_server.register_token_generator(
            "urn:ietf:params:oauth:grant-type:jwt-bearer",
            JWTBearerTokenGenerator(private_rsa_key),
        )

    In this way, we can generate the token into JWT format. And we don't have to
    save this token into database, since it will be short time valid. Consider to
    rewrite ``JWTBearerGrant.save_token``::

        class MyJWTBearerGrant(JWTBearerGrant):
            def save_token(self, token):
                pass

    :param secret_key: private RSA key in bytes, JWK or JWK Set.
    :param issuer: a string or URI of the issuer
    :param alg: ``alg`` to use in JWT
    i  Nc                 .    || _         || _        || _        y N)
secret_keyissueralg)selfr	   r
   r   s       X/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/oauth2/rfc7523/token.py__init__z JWTBearerTokenGenerator.__init__   s    $    c                 ,    |r| j                  |      }|S r   )get_allowed_scope)clientscopes     r   r   z)JWTBearerTokenGenerator.get_allowed_scope$   s    ,,U3Er   c                 "    | j                         S )zReturn user's ID as ``sub`` value in token payload. For instance::

        @staticmethod
        def get_sub_value(user):
            return str(user.id)
        )get_user_id)users    r   get_sub_valuez%JWTBearerTokenGenerator.get_sub_value*   s     !!r   c                     | j                  ||      }t        t        j                               }|||||z   |j                         d}| j                  r| j                  |d<   |r| j                  |      |d<   |S )N)r   
grant_typeiatexp	client_idisssub)r   inttimeget_client_idr
   r   )r   r   r   
expires_inr   r   	issued_atdatas           r   get_token_dataz&JWTBearerTokenGenerator.get_token_data4   sz    &&vu5		$	$z)--/
 ;;++DK,,T2DKr   c                     || j                   }| j                  |||||      }t        j                  d| j                  i|| j
                  d      }dt        |      |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.
        :return: Token dict
        r   F)keycheckBearer)
token_typeaccess_tokenr"   r   )DEFAULT_EXPIRES_INr%   r   encoder   r	   r   )	r   r   r   r   r   r"   
token_datar+   tokens	            r   generatez JWTBearerTokenGenerator.generateD   s{     00J((VZuU
zzDHHzte
 #%l3$

 "E'Nr   c                 ,    | j                  |||||      S r   )r0   )r   r   r   r   r   r"   include_refresh_tokens          r   __call__z JWTBearerTokenGenerator.__call__^   s     }}ZujIIr   )NRS256)NN)NNN)NNNT)__name__
__module____qualname____doc__r,   r   staticmethodr   r   r%   r0   r3    r   r   r   r      sZ    * 
  
 " " < "
Jr   r   )r    authlib.common.encodingr   authlib.joser   r   r:   r   r   <module>r=      s     - aJ aJr   