
    g                         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      Zy)    N)	lru_cache)
SSLContext)AnyDictListOptional)URLError   )PyJWKPyJWKSet)decode_complete)PyJWKClientConnectionErrorPyJWKClientError)JWKSetCachec                       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
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y)PyJWKClientNuri
cache_keysmax_cached_keyscache_jwk_setlifespanheaderstimeoutssl_contextc	                     |i }|| _         d | _        || _        || _        || _        |r%|dk  rt        d| d      t        |      | _        nd | _        |r" t        |      | j                        | _        y y )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   s	            O/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/jwt/jwks_client.py__init__zPyJWKClient.__init__   s     ?G48& 1}&EhZqQ  "-X!6D!%D $F9_#E$$$D      returnc                 .   d }	 t         j                  j                  | j                  | j                        }t         j                  j                  || j                  | j                        5 }t        j                  |      }d d d        || j                  | j                  j                  |       S S # 1 sw Y   3xY w# t        t        f$ r}t        d| d      |d }~ww xY w# | j                  | j                  j                  |       w w xY w)N)urlr   )r   contextz'Fail to fetch data from the url, err: "r   )urllibrequestRequestr   r   urlopenr   r   jsonloadr   putr	   TimeoutErrorr   )r    jwk_setrresponsees        r!   
fetch_datazPyJWKClient.fetch_data4   s    	0&&488T\\&JA''4<<1A1A ( ))H- !!-""&&w/ .  ,' 	,9!A>	 !!-""&&w/ .sB   A+C /B7C C* 7C <C C'C""C''C* **Drefreshc                     d }| j                   |s| j                   j                         }|| j                         }t        |t              st        d      t        j                  |      S )Nz.The JWKS endpoint did not return a JSON object)r   getr4   
isinstancedictr   r   	from_dict)r    r5   datas      r!   get_jwk_setzPyJWKClient.get_jwk_setF   sa    )'%%))+D<??$D$%"#STT!!$''r#   c                     | j                  |      }|j                  D cg c]  }|j                  dv r|j                  r|  }}|st	        d      |S c c}w )N)sigNz2The JWKS endpoint did not contain any signing keys)r<   keyspublic_key_usekey_idr   )r    r5   r0   jwk_set_keysigning_keyss        r!   get_signing_keyszPyJWKClient.get_signing_keysS   sj    ""7+  '||
+))]:{?Q?Q + 	 
 "#WXX
s   #Akidc                     | j                         }| j                  ||      }|s5| j                  d      }| j                  ||      }|st        d| d      |S )NT)r5   z,Unable to find a signing key that matches: "r   )rD   	match_kidr   )r    rE   rC   signing_keys       r!   r   zPyJWKClient.get_signing_key`   sj    ,,.nn\37000>L..s;K&B3%qI  r#   tokenc                 j    t        |ddi      }|d   }| j                  |j                  d            S )Nverify_signatureF)optionsheaderrE   )decode_tokenr   r7   )r    rI   
unverifiedrM   s       r!   get_signing_key_from_jwtz$PyJWKClient.get_signing_key_from_jwtp   s8    !%2De1LM
H%##FJJu$566r#   rC   c                 @    d }| D ]  }|j                   |k(  s|} |S  |S )N)rA   )rC   rE   rH   keys       r!   rG   zPyJWKClient.match_kidu   s3    CzzS !  
 r#   )F   Ti,  N   N)F)__name__
__module____qualname__strboolintr   r   r   r   r"   r4   r   r<   r   r   rD   r   rP   staticmethodrG    r#   r!   r   r      s    !!",0,0## # 	#
 # # $sCx.)# # j)#J0C 0$(4 (H ( e 3 5  7c 7e 7
 U # (5/  r#   r   )r,   urllib.requestr(   	functoolsr   sslr   typingr   r   r   r   urllib.errorr	   api_jwkr   r   api_jwtr   rN   
exceptionsr   r   r   r   r   r\   r#   r!   <module>re      s2        , , ! $ 4 D &p pr#   