
    &)c                         d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZ  G d
 d          ZdS )    N)	lru_cache)AnyListOptional)URLError   )PyJWKPyJWKSet)decode_complete)PyJWKClientError)JWKSetCachec                       e Zd Z	 	 	 	 ddedededed	ef
d
ZdefdZddede	fdZ
ddedee         fdZdedefdZdedefdZedee         dedee         fd            ZdS )PyJWKClientF   T,  uri
cache_keysmax_cached_keyscache_jwk_setlifespanc                     || _         d | _        |r.|dk    rt          d| d          t          |          | _        nd | _        |r% t	          |          | j                  | _        d S d S )Nr   z/Lifespan must be greater than 0, the input is "")maxsize)r   jwk_set_cacher   r   r   get_signing_key)selfr   r   r   r   r   s         1/usr/lib/python3/dist-packages/jwt/jwks_client.py__init__zPyJWKClient.__init__   s     48 		& 1}}&QhQQQ   "-X!6!6D!%D 	\ $F9_#E#E#EdFZ#[#[D   	\ 	\    returnc                    d }	 t           j                            | j                  5 }t	          j        |          }d d d            n# 1 swxY w Y   || j        | j                            |           S S # t          $ r}t          d| d          d }~ww xY w# | j        | j                            |           w w xY w)Nz'Fail to fetch data from the url, err: "r   )
urllibrequesturlopenr   jsonloadr   putr   r   )r   jwk_setresponsees       r   
fetch_datazPyJWKClient.fetch_data)   s   		0''11 .X)H--. . . . . . . . . . . . . . .
 !-"&&w//// .  	S 	S 	S"#QQ#Q#Q#QRRR	S
 !-"&&w//// .sK   $A8 A	A8 	AA8 AA8 B 8
BBBB $Crefreshc                     d }| j         |s| j                                         }||                                 }t          j        |          S N)r   getr+   r
   	from_dict)r   r,   datas      r   get_jwk_setzPyJWKClient.get_jwk_set6   sN    )')%))++D<??$$D!$'''r   c                 t    |                      |          }d |j        D             }|st          d          |S )Nc                 2    g | ]}|j         d v |j        |S ))sigN)public_key_usekey_id).0jwk_set_keys     r   
<listcomp>z0PyJWKClient.get_signing_keys.<locals>.<listcomp>B   s8     
 
 
)]::{?Q: :::r   z2The JWKS endpoint did not contain any signing keys)r2   keysr   )r   r,   r(   signing_keyss       r   get_signing_keyszPyJWKClient.get_signing_keys@   sU    ""7++
 
&|
 
 
  	Y"#WXXXr   kidc                     |                                  }|                     ||          }|sA|                      d          }|                     ||          }|st          d| d          |S )NT)r,   z,Unable to find a signing key that matches: "r   )r=   	match_kidr   )r   r>   r<   signing_keys       r   r   zPyJWKClient.get_signing_keyM   s    ,,..nn\377 	000>>L..s;;K &I3III   r   tokenc                     t          |ddi          }|d         }|                     |                    d                    S )Nverify_signatureF)optionsheaderr>   )decode_tokenr   r/   )r   rB   
unverifiedrF   s       r   get_signing_key_from_jwtz$PyJWKClient.get_signing_key_from_jwt]   sD    !%2De1LMMM
H%##FJJu$5$5666r   r<   c                 2    d }| D ]}|j         |k    r|} n|S r.   )r7   )r<   r>   rA   keys       r   r@   zPyJWKClient.match_kidb   s:     	 	CzS  ! ! r   N)Fr   Tr   )F)__name__
__module____qualname__strboolintr   r   r+   r
   r2   r   r	   r=   r   rI   staticmethodr   r@    r   r   r   r      sc        !!"\ \\ \ 	\
 \ \ \ \ \60C 0 0 0 0( (4 (H ( ( ( (  e    3 5     7c 7e 7 7 7 7
 U # (5/    \  r   r   )r%   urllib.requestr"   	functoolsr   typingr   r   r   urllib.errorr   api_jwkr	   r
   api_jwtr   rG   
exceptionsr   r   r   r   rS   r   r   <module>r[      s               & & & & & & & & & & ! ! ! ! ! ! $ $ $ $ $ $ $ $ 4 4 4 4 4 4 ( ( ( ( ( ( & & & & & &^ ^ ^ ^ ^ ^ ^ ^ ^ ^r   