a
    !fT                     @   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=1Z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,  )Z
secret_keyZissuersubject	algorithmttlN)superr   __init__	ALGORITHMcredential_sidvalidation_payload)selfZaccount_sidZapi_key_sidr   Zprivate_keyr   	__class__ _/var/www/html/python-backend/venv/lib/python3.9/site-packages/twilio/jwt/validation/__init__.pyr	      s    
zClientValidationJwt.__init__c                 C   s   t j| jdS )N)Z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
pld}d|}j jj j|g}|r|| |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>
& ;)ZhrhZrqh)r   r   itemssortedsigned_headersjoinquery_stringsplitr   _hashbodymethodpathappend)r   r'   Zheaders_strr)   Zreq_body_hashZsigned_headers_strZsigned_payloadr   )r   r   r   _generate_payload%   s.    









z%ClientValidationJwt._generate_payloadc                 C   s   t |tr|S |t|S )N)
isinstancestrr(   r&   )clsvaluesjoinerr   r   r   r   N   s    
z"ClientValidationJwt._sort_and_joinc                 C   s(   |s|S t |ts|d}t| S )Nzutf-8)r1   bytesencoder   	hexdigest)r3   Z	input_strr   r   r   r+   T   s
    

zClientValidationJwt._hash)__name__
__module____qualname____doc__r   r
   r	   r   r0   classmethodr   r+   __classcell__r   r   r   r   r      s   )
r   N)hashlibr   Z
twilio.jwtr   r   r   r   r   r   <module>   s   