
    qi                        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      Zy)    )annotationsN)	lru_cache)
SSLContext)Any)URLError   )PyJWKPyJWKSet)decode_complete)PyJWKClientConnectionErrorPyJWKClientError)JWKSetCachec                      e Zd Z	 	 	 	 	 	 	 d		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZddZdddZdddZddZddZe	dd       Z
y)PyJWKClientNc	                    |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)	urijwk_set_cacheheaderstimeoutssl_contextr   r   r   get_signing_key)
selfr   
cache_keysmax_cached_keyscache_jwk_setlifespanr   r   r   r   s
             A/opt/pipecat/venv/lib/python3.12/site-packages/jwt/jwks_client.py__init__zPyJWKClient.__init__   s     ?G15& 1}&EhZqQ  "-X!6D!%D@i@AUAUVO#2D 	     c                .   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_data5   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c                    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   getr1   
isinstancedictr   r
   	from_dict)r   refreshdatas      r   get_jwk_setzPyJWKClient.get_jwk_setG   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)r9   keyspublic_key_usekey_idr   )r   r7   r-   jwk_set_keysigning_keyss        r   get_signing_keyszPyJWKClient.get_signing_keysT   sg    ""7+  '||
))]:{?Q?Q 
 
 "#WXX
s   #Ac                    | j                         }| j                  ||      }|s5| j                  d      }| j                  ||      }|st        d| d      |S )NT)r7   z,Unable to find a signing key that matches: "r   )rA   	match_kidr   )r   kidr@   signing_keys       r   r   zPyJWKClient.get_signing_keya   sj    ,,.nn\37000>L..s;K&B3%qI  r!   c                j    t        |ddi      }|d   }| j                  |j                  d            S )Nverify_signatureF)optionsheaderrD   )decode_tokenr   r3   )r   token
unverifiedrI   s       r   get_signing_key_from_jwtz$PyJWKClient.get_signing_key_from_jwtq   s8    !%2De1LM
H%##FJJu$566r!   c                @    d }| D ]  }|j                   |k(  s|} |S  |S )N)r>   )r@   rD   rE   keys       r   rC   zPyJWKClient.match_kidv   s8     	CzzS !	
 r!   )F   Ti,  N   N)r   strr   boolr   intr   rS   r   floatr   zdict[str, Any] | Noner   rU   r   zSSLContext | None)returnr   )F)r7   rS   rV   r
   )r7   rS   rV   list[PyJWK])rD   rR   rV   r	   )rK   zstr | bytesrV   r	   )r@   rW   rD   rR   rV   zPyJWK | None)__name__
__module____qualname__r    r1   r9   rA   r   rM   staticmethodrC    r!   r   r   r      s     !!")-)-"3"3 "3 	"3
 "3 "3 '"3 "3 '"3H0$( 7
  r!   r   )
__future__r   r)   urllib.requestr%   	functoolsr   sslr   typingr   urllib.errorr   api_jwkr	   r
   api_jwtr   rJ   
exceptionsr   r   r   r   r   r\   r!   r   <module>rf      s2    "      ! $ 4 D &o or!   