1""" 
    2authlib.openid.connect.core.tokens 
    3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4 
    5This module contains methods for adding JWT tokens to requests. 
    6""" 
    7from oauthlib.oauth2.rfc6749.tokens import ( 
    8    TokenBase, get_token_from_header, random_token_generator, 
    9) 
    10 
    11 
    12class JWTToken(TokenBase): 
    13    __slots__ = ( 
    14        'request_validator', 'token_generator', 
    15        'refresh_token_generator', 'expires_in' 
    16    ) 
    17 
    18    def __init__(self, request_validator=None, token_generator=None, 
    19                 expires_in=None, refresh_token_generator=None): 
    20        self.request_validator = request_validator 
    21        self.token_generator = token_generator or random_token_generator 
    22        self.refresh_token_generator = ( 
    23            refresh_token_generator or self.token_generator 
    24        ) 
    25        self.expires_in = expires_in or 3600 
    26 
    27    def create_token(self, request, refresh_token=False): 
    28        """Create a JWT Token, using requestvalidator method.""" 
    29 
    30        expires_in = self.expires_in(request) if callable(self.expires_in) else self.expires_in 
    31 
    32        request.expires_in = expires_in 
    33 
    34        return self.request_validator.get_jwt_bearer_token(None, None, request) 
    35 
    36    def validate_request(self, request): 
    37        token = get_token_from_header(request) 
    38        return self.request_validator.validate_jwt_bearer_token( 
    39            token, request.scopes, request) 
    40 
    41    def estimate_type(self, request): 
    42        token = get_token_from_header(request) 
    43        if token and token.startswith('ey') and token.count('.') in (2, 4): 
    44            return 10 
    45        return 0