o
    "“i£  ã                   @   s–   d dl Z d dlZd dlmZ d dlmZ d dlmZ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mZ dd
lmZ G dd„ dƒZdS )é    N)Ú	lru_cache)Ú
SSLContext)ÚAnyÚDictÚListÚOptional)ÚURLErroré   )ÚPyJWKÚPyJWKSet)Údecode_complete)ÚPyJWKClientConnectionErrorÚPyJWKClientError)ÚJWKSetCachec                   @   sÖ   e Zd Z							d"deded	ed
ededeeeef  dedee	 fdd„Z
defdd„Zd#dedefdd„Zd#dedee fdd„Zdedefdd„Zdedefdd„Zedee dedee fd d!„ƒZdS )$ÚPyJWKClientFé   Té,  Né   ÚuriÚ
cache_keysÚmax_cached_keysÚcache_jwk_setÚlifespanÚheadersÚtimeoutÚssl_contextc	           	      C   sv   |d u ri }|| _ d | _|| _|| _|| _|r)|dkr#td|› d�ƒ‚t|ƒ| _nd | _|r9t|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!   úO/var/www/html/premium_crap/venv/lib/python3.10/site-packages/jwt/jwks_client.pyÚ__init__   s&   
ÿ
ÿýzPyJWKClient.__init__Úreturnc              
   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_data4   s0   
ÿý€
ÿþ€ÿ
ÿÿzPyJWKClient.fetch_dataÚrefreshc                 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   Úgetr3   Ú
isinstanceÚdictr   r   Ú	from_dict)r    r4   Údatar!   r!   r"   Úget_jwk_setF   s   


zPyJWKClient.get_jwk_setc                 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>U   s
    þz0PyJWKClient.get_signing_keys.<locals>.<listcomp>z2The JWKS endpoint did not contain any signing keys)r:   Úkeysr   )r    r4   r/   Úsigning_keysr!   r!   r"   Úget_signing_keysS   s   
þzPyJWKClient.get_signing_keysÚkidc                 C   sH   |   ¡ }|  ||¡}|s"| j dd�}|  ||¡}|s"td|› d�ƒ‚|S )NT)r4   z,Unable to find a signing key that matches: "r   )rC   Ú	match_kidr   )r    rD   rB   Úsigning_keyr!   r!   r"   r   `   s   
ÿzPyJWKClient.get_signing_keyÚtokenc                 C   s(   t |ddid�}|d }|  | d¡¡S )NÚverify_signatureF)ÚoptionsÚheaderrD   )Údecode_tokenr   r5   )r    rG   Ú
unverifiedrJ   r!   r!   r"   Úget_signing_key_from_jwtp   s   z$PyJWKClient.get_signing_key_from_jwtrB   c                 C   s&   d }| D ]}|j |kr|} |S q|S )N)r=   )rB   rD   rF   Úkeyr!   r!   r"   rE   u   s   
üzPyJWKClient.match_kid)Fr   Tr   Nr   N)F)Ú__name__Ú
__module__Ú__qualname__ÚstrÚboolÚintr   r   r   r   r#   r3   r   r:   r   r
   rC   r   rM   ÚstaticmethodrE   r!   r!   r!   r"   r      s@    ÷þýüûúùø	
÷%$r   )r+   Úurllib.requestr'   Ú	functoolsr   Ússlr   Útypingr   r   r   r   Úurllib.errorr   Úapi_jwkr
   r   Úapi_jwtr   rK   Ú
exceptionsr   r   r   r   r   r!   r!   r!   r"   Ú<module>   s    