
    pi                     H    d dl Zd dlZddgZ G d de      Z G d de      Zy)    NJwtJwtDecodeErrorc                       e Zd Zy)r   N)__name__
__module____qualname__     U/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/twilio/jwt/__init__.pyr   r      s    r
   c                       e Zd ZdZ e       ZdZddeddfdZd Zd Z	e
dd       Zed	        Zed
        ZddZe
dd       Zd Zy)r   z(Base class for building a Json Web TokenHS256Ni  c                     || _         	 || _        	 || _        	 |xs | j                  | _        	 || _        	 || _        	 || _        	 d | _        d | _	        y N)

secret_keyissuersubject	ALGORITHM	algorithmnbfttlvalid_until_Jwt__decoded_payload_Jwt__decoded_headers)selfr   r   r   r   r   r   r   s           r   __init__zJwt.__init__   sd     %:/Q"4dnnRdO&c!%!%r
   c                     t        d      )z+:rtype: dict the payload of the JWT to sendz Subclass must provide a payload.)NotImplementedErrorr   s    r   _generate_payloadzJwt._generate_payload.   s    !"DEEr
   c                     i S )zP:rtype dict: Additional headers to include in the JWT, defaults to an empty dictr	   r   s    r   _generate_headerszJwt._generate_headers2   s    	r
   c                     t        ||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd            }||_        ||_        |S )z
        Class specific implementation of from_jwt which should take jwt components and return
        and instance of this Class with jwt information loaded.
        :return: Jwt object containing the headers, payload and key
        issNsubalgexpr   )r   r   r   r   r   r   )r   getr   r   )clsheaderspayloadkeyjwts        r   	_from_jwtzJwt._from_jwt6   sn     ;;ud+KKt,kk%.E40E4(
 !( '
r
   c                     | j                   r| j                   S | j                         j                         }| j                  |d<   t	        t        j
                               | j                  z   |d<   | j                  I| j                  | j                  k(  r!t	        t        j
                               |d<   n| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   |S )Nr#   r&   r   r$   )r   r   copyr   inttimer   r   GENERATEr   r   )r   r*   s     r   r*   zJwt.payloadI   s    !!)))((*//1TYY[)DHH488xx4==(!$TYY[!1!%!--GEN<<!\\GENr
   c                     | j                   r| j                   S | j                         j                         }d|d<   | j                  |d<   |S )NJWTtypr%   )r   r!   r/   r   )r   r)   s     r   r)   zJwt.headers]   sI    !!)))((*//1r
   c                 <   | j                   st        d      | j                  j                         }| j                  j                         }|r#t        t        j                               |z   |d<   t        j                  || j                   | j                  |      S )z
        Encode this JWT object into a JWT string
        :param int ttl: override the ttl configured in the constructor
        :rtype: str The JWT string
        z+JWT does not have a signing key configured.r&   )r   r)   )
r   
ValueErrorr)   r/   r*   r0   r1   jwt_libencoder   )r   r   r)   r*   s       r   to_jwtz
Jwt.to_jwtg   sy     JKK,,##%,,##% -3GEN~~T__
 	
r
   c           
         |rdnd}	 t        j                  |      }|j                  d      }|| j                  k7  rt	        d| d| j                   d      t        j
                  ||| j                  g|ddd      }| j                  |||      S # t        $ r$}t        t        |d	t        |                  d
}~ww xY w)av  
        Decode a JWT string into a Jwt object
        :param str jwt: JWT string
        :param Optional[str] key: key used to verify JWT signature, if not provided then validation
                                  is skipped.
        :raises JwtDecodeError if decoding JWT fails for any reason.
        :return: A DecodedJwt object containing the jwt information.
        TFr%   zIncorrect decoding algorithm z, expecting .)verify_signature
verify_exp
verify_nbf)
algorithmsoptionsmessageN)r8   get_unverified_headerr'   r   r7   decode	Exceptionr   getattrstrr-   )r(   r,   r+   verifyr)   r%   r*   es           r   from_jwtzJwt.from_jwt{   s     %	@33C8G++e$Ccmm# 3C5 9!!$q2 
 nnMM?(."&"&		G }}Wgs33  	@ Is1v!>??	@s   A9B 	CB<<Cc                 @    dj                  | j                               S )Nz<JWT {}>)formatr:   r   s    r   __str__zJwt.__str__   s      //r
   r   ) )r   r   r   __doc__objectr2   r   r   r   r!   classmethodr-   propertyr*   r)   r:   rJ   rM   r	   r
   r   r   r      s    2xHI &8F  $  &  
( "4 "4H0r
   )r,   r8   r1   __all__rE   r   rP   r   r	   r
   r   <module>rT      s2      "
#	Y 	U0& U0r
   