
    k7i8                     8    S SK r S SKJr  S SKJr   " S S5      rg)    N)	to_native)jwtc                   l    \ rS rSrSrSrSS jr\S 5       r\S 5       r	SS jr
SS	 jr    SS
 jrSrg)JWTBearerTokenGenerator   a  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                 (    Xl         X l        X0l        g N)
secret_keyissueralg)selfr
   r   r   s       V/home/james-whalen/.local/lib/python3.13/site-packages/authlib/oauth2/rfc7523/token.py__init__ JWTBearerTokenGenerator.__init__   s    $    c                 6    U(       a  U R                  U5      nU$ r	   )get_allowed_scope)clientscopes     r   r   )JWTBearerTokenGenerator.get_allowed_scope$   s    ,,U3Er   c                 "    U R                  5       $ )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_value%JWTBearerTokenGenerator.get_sub_value*   s     !!r   c                 
   U R                  X%5      n[        [        R                  " 5       5      nUUUXc-   UR                  5       S.nU R                  (       a  U R                  US'   U(       a  U R                  U5      US'   U$ )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_data&JWTBearerTokenGenerator.get_token_data4   sv    &&v5		$	$)--/
 ;;++DK,,T2DKr   c                     Uc  U R                   nU R                  XXSU5      n[        R                  " SU R                  0X`R
                  SS9nS[        U5      US.nU(       a  XHS'   U$ )aH  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_datar0   tokens	            r   generate JWTBearerTokenGenerator.generateD   ss     00J((ZuU
zzDHHze
 #%l3$

 "'Nr   c                 (    U R                  XX4U5      $ r	   )r5   )r   r   r   r   r   r&   include_refresh_tokens          r   __call__ JWTBearerTokenGenerator.__call__^   s     }}ZjIIr   )r   r   r
   )NRS256)NN)NNN)NNNT)__name__
__module____qualname____firstlineno____doc__r1   r   staticmethodr   r   r)   r5   r9   __static_attributes__ r   r   r   r      sZ    * 
  
 " " < "
Jr   r   )r$   authlib.common.encodingr   authlib.joser   r   rC   r   r   <module>rF      s     - aJ aJr   