o
    O`B                     @   s8   d dl mZ d dlmZ d dlmZ G dd deZdS )    )sha256)string_types)Jwtc                       sL   e Zd ZdZdZ fddZdd Zdd Zed	d
 Z	edd Z
  ZS )ClientValidationJwtzIA JWT included on requests so that Twilio can verify request authenticityztwilio-pkrv;v=1c                    s*   t t| j|||ddd || _|| _dS )a  
        Create a new ClientValidationJwt
        :param str account_sid: A Twilio Account Sid starting with 'AC'
        :param str api_key_sid: A Twilio API Key Sid starting with 'SK'
        :param str credential_sid: A Credential Sid starting with 'CR',
                                   public key Twilio will use to verify the JWT.
        :param str private_key: The private key used to sign the JWT.
        :param ValidationPayload validation_payload: information from the request to sign
        RS256i,  )
secret_keyissuersubject	algorithmttlN)superr   __init__credential_sidvalidation_payload)selfaccount_sidapi_key_sidr   private_keyr   	__class__ b/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/twilio/jwt/validation/__init__.pyr      s   


zClientValidationJwt.__init__c                 C   s   t j| jdS )N)ctykid)r   _ClientValidationJwt__CTYr   r   r   r   r   _generate_headers   s   z%ClientValidationJwt._generate_headersc                    s   fddj j D  tj j} fdd|D }d|}j jd}|d}	j j
p6d}d|}j jj j|g}|rL|| |d || || d|}|	|d	S )
Nc                    s"   i | ]\}}|   |d qS ),)lower_sort_and_join).0kvr   r   r   
<dictcomp>'   s   " z9ClientValidationJwt._generate_payload.<locals>.<dictcomp>c                    s$   g | ]}| v rd  | | qS )z{}:{})format)r    h)all_headersr   r   
<listcomp>,   s   $ z9ClientValidationJwt._generate_payload.<locals>.<listcomp>
& ;)hrhrqh)r   r&   itemssortedsigned_headersjoinquery_stringsplitr   _hashbodymethodpathappend)r   r0   headers_strr2   req_body_hashsigned_headers_strsigned_payloadr   )r&   r   r   _generate_payload%   s*   






z%ClientValidationJwt._generate_payloadc                 C   s   t |tr|S |t|S )N)
isinstancer   r1   r/   )clsvaluesjoinerr   r   r   r   J   s   
z"ClientValidationJwt._sort_and_joinc                 C   s(   |s|S t |ts|d}t| S )Nzutf-8)r>   bytesencoder   	hexdigest)r?   	input_strr   r   r   r4   P   s
   

zClientValidationJwt._hash)__name__
__module____qualname____doc__r   r   r   r=   classmethodr   r4   __classcell__r   r   r   r   r      s    %
r   N)hashlibr   sixr   
twilio.jwtr   r   r   r   r   r   <module>   s    