o
    i                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ G dd dZdS )    )annotationsN)	lru_cache)
SSLContext)Any)URLError   )PyJWKPyJWKSet)decode_complete)PyJWKClientConnectionErrorPyJWKClientError)JWKSetCachec                   @  sj   e Zd Z							d.d/ddZd0ddZd1d2ddZd1d3d d!Zd4d$d%Zd5d(d)Ze	d6d,d-Z
dS )7PyJWKClientF   T,  N   uristr
cache_keysboolmax_cached_keysintcache_jwk_setlifespanfloatheadersdict[str, Any] | Nonetimeoutssl_contextSSLContext | Nonec	           
      C  sz   |d u ri }|| _ d | _|| _|| _|| _|r)|dkr#td| dt|| _nd | _|r;t|d| j}	|	| _d S d S )Nr   z/Lifespan must be greater than 0, the input is "")maxsize)	r   jwk_set_cacher   r   r   r   r   r   get_signing_key)
selfr   r   r   r   r   r   r   r   r#    r%   M/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/jwt/jwks_client.py__init__   s$   

zPyJWKClient.__init__returnr   c              
   C  s   d }zSz,t jj| j| jd}t jj|| j| jd}t	|}W d    n1 s)w   Y  W n t
tfyF } z	td| d|d }~ww |W | jd urU| j| S S | jd urb| j| w w )N)urlr   )r   contextz'Fail to fetch data from the url, err: "r    )urllibrequestRequestr   r   urlopenr   r   jsonloadr   TimeoutErrorr   r"   put)r$   jwk_setrresponseer%   r%   r&   
fetch_data5   s0   


zPyJWKClient.fetch_datarefreshr	   c                 C  sH   d }| j d ur|s| j  }|d u r|  }t|tstdt|S )Nz.The JWKS endpoint did not return a JSON object)r"   getr7   
isinstancedictr   r	   	from_dict)r$   r8   datar%   r%   r&   get_jwk_setG   s   


zPyJWKClient.get_jwk_setlist[PyJWK]c                 C  s*   |  |}dd |jD }|std|S )Nc                 S  s    g | ]}|j d v r|jr|qS ))sigN)public_key_usekey_id).0jwk_set_keyr%   r%   r&   
<listcomp>V   s
    z0PyJWKClient.get_signing_keys.<locals>.<listcomp>z2The JWKS endpoint did not contain any signing keys)r>   keysr   )r$   r8   r3   signing_keysr%   r%   r&   get_signing_keysT   s   
zPyJWKClient.get_signing_keyskidr   c                 C  sH   |   }| ||}|s"| j dd}| ||}|s"td| d|S )NT)r8   z,Unable to find a signing key that matches: "r    )rH   	match_kidr   )r$   rI   rG   signing_keyr%   r%   r&   r#   a   s   
zPyJWKClient.get_signing_keytokenstr | bytesc                 C  s(   t |ddid}|d }| |dS )Nverify_signatureF)optionsheaderrI   )decode_tokenr#   r9   )r$   rL   
unverifiedrP   r%   r%   r&   get_signing_key_from_jwtq   s   z$PyJWKClient.get_signing_key_from_jwtrG   PyJWK | Nonec                 C  s&   d }| D ]}|j |kr|} |S q|S )N)rB   )rG   rI   rK   keyr%   r%   r&   rJ   v   s   
zPyJWKClient.match_kid)Fr   Tr   Nr   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r(   r   )F)r8   r   r(   r	   )r8   r   r(   r?   )rI   r   r(   r   )rL   rM   r(   r   )rG   r?   rI   r   r(   rT   )__name__
__module____qualname__r'   r7   r>   rH   r#   rS   staticmethodrJ   r%   r%   r%   r&   r      s     
$

r   )
__future__r   r/   urllib.requestr+   	functoolsr   sslr   typingr   urllib.errorr   api_jwkr   r	   api_jwtr
   rQ   
exceptionsr   r   r"   r   r   r%   r%   r%   r&   <module>   s    