a
    ù!fÝ  ã                   @   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   úT/var/www/html/python-backend/venv/lib/python3.9/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 TokenZHS256Ni  c                 C   s@   || _ || _|| _|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ƒ‚dS )z+:rtype: dict the payload of the JWT to sendz Subclass must provide a payload.N)Ú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_headers2   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_jwt6   s    




úzJwt._from_jwtc                 C   sŽ   | j r| j S |  ¡  ¡ }| j|d< tt ¡ ƒ| j |d< | jd urj| j| jkr`tt ¡ ƒ|d< n
| j|d< | j	rz| j	|d< | j
rŠ| j
|d< |S )Nr   r   r   r   )r   r   Úcopyr
   ÚintÚtimer   r   ÚGENERATEr   r   )r   r    r   r   r   r    I   s    




zJwt.payloadc                 C   s.   | j r| j S |  ¡  ¡ }d|d< | j|d< |S )NZJWTÚtypr   )r   r   r$   r   )r   r   r   r   r   r   ]   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_jwtg   s    

ÿz
Jwt.to_jwtÚ c              
   C   s¬   |rdnd}zXt  |¡}| d¡}|| jkrDtd|› d| j› dƒ‚t j||| jg|dddœd}W n8 tyœ } z tt|d	t	|ƒƒƒ‚W Y d
}~n
d
}~0 0 |  
|||¡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 Ú.)Zverify_signatureZ
verify_expZ
verify_nbf)Z
algorithmsÚoptionsÚmessageN)r*   Zget_unverified_headerr   r   r)   ÚdecodeÚ	Exceptionr   ÚgetattrÚstrr#   )r   r"   r!   Úverifyr   r   r    Úer   r   r   Úfrom_jwt{   s,    



ÿÿýü

*zJwt.from_jwtc                 C   s   d  |  ¡ ¡S )Nz<JWT {}>)Úformatr,   r   r   r   r   Ú__str__    s    zJwt.__str__)N)N)r-   )r   r   r   Ú__doc__Úobjectr'   r   r   r   r   Úclassmethodr#   Úpropertyr    r   r,   r7   r9   r   r   r   r   r      s*   ø


	
$)r"   r*   r&   Ú__all__r2   r   r;   r   r   r   r   r   Ú<module>   s   