o
    eV                     @   s8   d dl mZ d dlZd dlZd dlT 	 G dd dZdS )    )absolute_importN)*c                   @   s   e Zd ZdZdZdZdZdZi ZdZ	e
e geeejgeeejedd dgeeej geeeej edd dgeeej gd		
	
	
	
dddZe
eeegeeegddddZdd Zd
S )AccessToken r   Q c                 C   s   t | dkS )Nr   )len)username r	   B/var/www/html/venv/lib/python3.10/site-packages/plivo/utils/jwt.py<lambda>   s    zAccessToken.<lambda>zempty usernamec                 C   s   d|   ko	dkS   S )N   r   r	   )lifetimer	   r	   r
   r      s    z180 < lifetime <= 86400)auth_id
auth_tokenr   
valid_fromr   
valid_tillNc                 C   s   || _ || _|rt|| _ntt | _|r%t|| _|d ur$tdn%|rJ|| j | _| jdk r9td| j | jdk sC| jdkrJtd| j || _|rT|| _d S d|t f | _d S )Nz!use either lifetime or valid_tillr   z,validity expires %s seconds before it startsr   r   z=validity of %s seconds is out of permitted range [180, 86400]z%s-%s)	r   r   intr   timer   ValidationErrorkeyuid)selfr   r   r   r   r   r   r   r	   r	   r
   __init__   s8   


zAccessToken.__init__)incomingoutgoingFc                 C   s   ||d| j d< d S )N)incoming_allowoutgoing_allowvoice)grants)r   r   r   r	   r	   r
   add_voice_grantsF   s   zAccessToken.add_voice_grantsc                 C   sJ   ddd}d}| j | j| j| j| j| j | jd}t|| j||	dS )NJWTz	plivo;v=1)typctyHS256)jtiisssubnbfexpr   zutf-8)
r   r   r   r   r   r   jwtencoder   decode)r   headers	algorithmclaimsr	   r	   r
   to_jwtP   s   

zAccessToken.to_jwt)NNNN)FF)__name__
__module____qualname__r   r   r   r   r   r   r   validate_argsis_account_idoptionalof_typesix	text_typeall_ofcheckinteger_typesr   of_type_exactboolr   r/   r	   r	   r	   r
   r      sL    $r   )
__future__r   r)   r   plivo.utils.validatorsr   r	   r	   r	   r
   <module>   s
    