o
    e;                     @   s,   d dl mZ d dlmZ G dd deZdS )    )sha256)Jwtc                       sP   e Zd 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=1RS256c                    s,   t t| j|||| j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
        i,  )
secret_keyissuersubject	algorithmttlN)superr   __init__	ALGORITHMcredential_sidvalidation_payload)selfaccount_sidapi_key_sidr   private_keyr   	__class__ Q/var/www/html/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)
isinstancestrr1   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   r=   classmethodr   r4   __classcell__r   r   r   r   r      s    %
r   N)hashlibr   
twilio.jwtr   r   r   r   r   r   <module>   s    