
    `i                        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dS )    )annotationsN)	lru_cache)
SSLContext)Any)URLError   )PyJWKPyJWKSet)decode_complete)PyJWKClientConnectionErrorPyJWKClientError)JWKSetCachec                  j    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
dS )0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	                   |i }|| _         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    r   r   r   get_signing_key)
selfr   r   r   r   r   r   r   r    r&   s
             c/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/jwt/jwks_client.py__init__zPyJWKClient.__init__   s     ?G15& 		& 1}}&QhQQQ   "-X!6!6D!%D 	3@i@@@AUVVO#2D   		3 	3    returnr   c                   d }	 t           j                            | j        | j                  }t           j                            || j        | j                  5 }t          j	        |          }d d d            n# 1 swxY w Y   || j
        | j
                            |           S S # t          t          f$ r}t          d| d          |d }~ww xY w# | 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   sY   	0&&48T\&JJA''4<1A (   .)H--. . . . . . . . . . . . . . . !-"&&w//// . ,' 	 	 	,>!>>> 	 !-"&&w//// .sN   AB+ A<0B+ <B  B+ B B+ C +C<CCC $C<refreshr
   c                    d }| j         |s| j                                         }||                                 }t          |t                    st          d          t          j        |          S )Nz.The JWKS endpoint did not return a JSON object)r%   getr;   
isinstancedictr   r
   	from_dict)r'   r<   datas      r(   get_jwk_setzPyJWKClient.get_jwk_setG   sp    )')%))++D<??$$D$%% 	U"#STTT!$'''r*   list[PyJWK]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>V   s8     
 
 
)]::{?Q: :::r*   z2The JWKS endpoint did not contain any signing keys)rC   keysr   )r'   r<   r7   signing_keyss       r(   get_signing_keyszPyJWKClient.get_signing_keysT   sU    ""7++
 
&|
 
 
  	Y"#WXXXr*   kidr	   c                    |                                  }|                     ||          }|sA|                      d          }|                     ||          }|st          d| d          |S )NT)r<   z,Unable to find a signing key that matches: "r#   )rO   	match_kidr   )r'   rP   rN   signing_keys       r(   r&   zPyJWKClient.get_signing_keya   s    ,,..nn\377 	000>>L..s;;K &I3III   r*   tokenstr | bytesc                    t          |ddi          }|d         }|                     |                    d                    S )Nverify_signatureF)optionsheaderrP   )decode_tokenr&   r>   )r'   rT   
unverifiedrY   s       r(   get_signing_key_from_jwtz$PyJWKClient.get_signing_key_from_jwtq   sD    !%2De1LMMM
H%##FJJu$5$5666r*   rN   PyJWK | Nonec                2    d }| D ]}|j         |k    r|} n|S )N)rI   )rN   rP   rS   keys       r(   rR   zPyJWKClient.match_kidv   s:     	 	CzS  ! ! r*   )Fr   Tr   Nr   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )r+   r   )F)r<   r   r+   r
   )r<   r   r+   rD   )rP   r   r+   r	   )rT   rU   r+   r	   )rN   rD   rP   r   r+   r]   )__name__
__module____qualname__r)   r;   rC   rO   r&   r\   staticmethodrR    r*   r(   r   r      s         !!")-)-"3 "3 "3 "3 "3H0 0 0 0$( ( ( ( (        7 7 7 7
    \  r*   r   )
__future__r   r3   urllib.requestr/   	functoolsr   sslr   typingr   urllib.errorr   api_jwkr	   r
   api_jwtr   rZ   
exceptionsr   r   r%   r   r   rd   r*   r(   <module>rn      s   " " " " " "                        ! ! ! ! ! ! $ $ $ $ $ $ $ $ 4 4 4 4 4 4 D D D D D D D D & & & & & &o o o o o o o o o or*   