o
    �¨Êhý  ã                   @   s¤   d dl Z d dlZd dlmZ ejd  dkr ejd dkr eje _d dlZzd dlZW n e	y7   d dl
ZY nw d dlZddgZG dd„ deƒZG d	d„ deƒZdS )
é    N)Úcompaté   é   é   ÚJwtÚJwtDecodeErrorc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   úE/var/www/html/env/lib/python3.10/site-packages/twilio/jwt/__init__.pyr      s    c                   @   s€   e Zd ZdZeƒ Zddeddfdd„Zdd„ Zd	d
„ Ze	ddd„ƒZ
edd„ ƒZedd„ ƒZddd„Ze	ddd„ƒZdd„ ZdS )r   z(Base class for building a Json Web TokenNÚHS256i  c                 C   sH   || _ 	 || _	 || _	 || _	 || _	 || _	 || _	 d | _d | _d S ©N)	Ú
secret_keyÚissuerÚsubjectÚ	algorithmÚnbfÚttlÚvalid_untilÚ_Jwt__decoded_payloadÚ_Jwt__decoded_headers)Úselfr   r   r   r   r   r   r   r   r   r   Ú__init__   s    
zJwt.__init__c                 C   s   t dƒ‚)z+:rtype: dict the payload of the JWT to sendz Subclass must provide a payload.)ÚNotImplementedError©r   r   r   r   Ú_generate_payload3   s   zJwt._generate_payloadc                 C   s   i S )zP:rtype dict: Additional headers to include in the JWT, defaults to an empty dictr   r   r   r   r   Ú_generate_headers7   s   zJwt._generate_headersc              
   C   sL   t || dd¡| dd¡| dd¡| dd¡| d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Újwtr   r   r   Ú	_from_jwt;   s   




úzJwt._from_jwtc                 C   sŽ   | j r| j S |  ¡  ¡ }| j|d< tt ¡ ƒ| j |d< | jd ur5| j| jkr0tt ¡ ƒ|d< n| j|d< | j	r=| j	|d< | j
rE| j
|d< |S )Nr   r!   r   r   )r   r   Úcopyr   ÚintÚtimer   r   ÚGENERATEr   r   )r   r%   r   r   r   r%   N   s   




zJwt.payloadc                 C   s.   | j r| j S |  ¡  ¡ }d|d< | j|d< |S )NÚJWTÚtypr    )r   r   r)   r   )r   r$   r   r   r   r$   b   s   
zJwt.headersc                 C   sd   | j stdƒ‚| j ¡ }|r||d< |p| j}| j ¡ }|r(tt ¡ ƒ| |d< tj	|| j ||d�S )zð
        Encode this JWT object into a JWT string
        :param str algorithm: override the algorithm used to encode the JWT
        :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$   )
r   Ú
ValueErrorr$   r)   r   r%   r*   r+   Újwt_libÚencode)r   r   r   r$   r%   r   r   r   Úto_jwtl   s   


z
Jwt.to_jwtÚ c              
   C   sr   |rdnd}zt jt|ƒ||dddœd�}t  |¡}W n ty1 } z
tt|dt|ƒƒƒ‚d}~ww |  |||¡S )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.
        TF)Úverify_signatureÚ
verify_expÚ
verify_nbf)ÚoptionsÚmessageN)	r0   ÚdecodeÚbytesÚget_unverified_headerÚ	Exceptionr   ÚgetattrÚstrr(   )r#   r'   r&   Úverifyr%   r$   Úer   r   r   Úfrom_jwt‚   s   

ý€ÿzJwt.from_jwtc                 C   s   d  |  ¡ ¡S )Nz<JWT {}>)Úformatr2   r   r   r   r   Ú__str__š   s   zJwt.__str__r   )NN)r3   )r   r	   r
   Ú__doc__Úobjectr,   r   r   r   Úclassmethodr(   Úpropertyr%   r$   r2   rA   rC   r   r   r   r   r      s$    
ÿ


	)ÚhmacÚsysÚ
twilio.jwtr   Úversion_infoÚcompare_digestr'   r0   ÚjsonÚImportErrorÚ
simplejsonr+   Ú__all__r<   r   rE   r   r   r   r   r   Ú<module>   s    ÿ