o
    ä›e  ã                   @   s<   d dl Zd dlZddgZG dd„ deƒZG dd„ deƒZdS )é    NÚJwtÚJwtDecodeErrorc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   úF/var/www/html/venv/lib/python3.10/site-packages/twilio/jwt/__init__.pyr      s    c                   @   s„   e Zd ZdZeƒ Zd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 TokenÚHS256Ni  c                 C   sN   || _ 	 || _	 || _	 |p| j| _	 || _	 || _	 || _	 d | _d | _	d S ©N)
Ú
secret_keyÚissuerÚsubjectÚ	ALGORITHMÚ	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_payload%   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_headers)   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"   @   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!   T   s   
zJwt.headersc                 C   sP   | j stdƒ‚| j ¡ }| j ¡ }|rtt ¡ ƒ| |d< tj|| j | j	|d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"   r'   r(   Újwt_libÚencoder   )r   r   r!   r"   r   r   r   Úto_jwt^   s   

z
Jwt.to_jwtÚ c              
   C   s    |rdnd}z,t  |¡}| d¡}|| jkr"td|› d| j› dƒ‚t j||| jg|dddœd}W n tyH } 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.
        TFr   zIncorrect decoding algorithm z, expecting Ú.)Úverify_signatureÚ
verify_expÚ
verify_nbf)Ú
algorithmsÚoptionsÚmessageN)r-   Úget_unverified_headerr   r   r,   ÚdecodeÚ	Exceptionr   ÚgetattrÚstrr%   )r    r$   r#   Úverifyr!   r   r"   Úer   r   r   Úfrom_jwtp   s$   





ÿý€ÿzJwt.from_jwtc                 C   s   d  |  ¡ ¡S )Nz<JWT {}>)Úformatr/   r   r   r   r   Ú__str__Ž   s   zJwt.__str__r
   )r0   )r   r   r   Ú__doc__Úobjectr)   r   r   r   r   Úclassmethodr%   Úpropertyr"   r!   r/   r?   rA   r   r   r   r   r      s&    
ÿ


	)r$   r-   r(   Ú__all__r:   r   rC   r   r   r   r   r   Ú<module>   s
    