o
    ä›e
  ã                   @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZ ddlm	Z	 z
d dl
mZmZ W n ey;   d dlmZmZ Y nw zd dlmZ W n eyS   d d	lmZ Y nw zd d
l mZ W n eyk   d dl mZ Y nw ddd„Zdd„ Zdd„ Zdd„ Zddd„ZdS )é    N)Údatetime)Únew)Úsha256é   )Úvalidate_v3_signature)ÚurlparseÚ
urlunparse)Úencodebytes)Úencodestring)Úgetfullargspec)Ú
getargspecÚ c                 C   sŠ   t | d¡ƒ}t | d¡ƒ}t | d¡ƒ}t|  d¡ƒ}t|j d¡|j d¡|j d¡dddfƒ d¡}tt	||| t
ƒ ¡ ƒ ¡ |kS )a'  
    Validates requests made by Plivo to your servers.

    :param uri: Your server URL
    :param nonce: X-Plivo-Signature-V2-Nonce
    :param signature: X-Plivo-Signature-V2 header
    :param auth_token: Plivo Auth token
    :return: True if the request matches signature, False otherwise
    zutf-8r   )ÚbytesÚencoder   r   ÚschemeÚdecodeÚnetlocÚpathÚbase64_encodeÚhnewr   ÚdigestÚstrip)ÚuriÚnonceÚ	signatureÚ
auth_tokenÚ
parsed_uriÚbase_url© r   úG/var/www/html/venv/lib/python3.10/site-packages/plivo/utils/__init__.pyÚvalidate_signature   s    
ýýÿÿr    c                 C   s   t | tƒrdS dS )NTF)Ú
isinstancer   )Útimer   r   r   Úis_valid_time_comparison2   s   
r#   c                 C   ó,   t | ƒ}t|ƒdkr|d d… dkrdS dS )Né   é   ÚSATF©ÚstrÚlen)Ú
subaccountÚsubaccount_stringr   r   r   Úis_valid_subaccount8   ó   r-   c                 C   r$   )Nr%   r&   ÚMATFr(   )ÚmainaccountÚmainaccount_stringr   r   r   Úis_valid_mainaccount?   r.   r2   Tc                    s2   t | ƒd }t|ƒ‰ ‡ ‡‡fdd„| ¡ D ƒ}|S )Nr   c                    sH   i | ] \}}|d kr"|ˆ v sˆdkr"|dusˆdu rt  dd|¡|“qS )ÚselfFNz^(.*)_+$z\1)ÚreÚsub)Ú.0ÚkeyÚvalue©Ú	arg_namesÚexclude_noneÚfunc_args_checkr   r   Ú
<dictcomp>L   s    ýz!to_param_dict.<locals>.<dictcomp>)r   ÚlistÚitems)ÚfuncÚvalsr;   r<   ÚargsÚpdr   r9   r   Úto_param_dictF   s   þrD   )r   )TT)Úinspectr4   r   Úhmacr   r   Úhashlibr   Úsignature_v3r   Úurllib.parser   r   ÚImportErrorÚbase64r	   r   r
   r   r   r    r#   r-   r2   rD   r   r   r   r   Ú<module>   s4   ÿÿÿ
