a
    !f^
                     @   sl   d dl Z d dlZd dlZd dlmZ d dlmZ d dlZd dlmZm	Z	 G dd de
ZG dd de
ZdS )	    N)OrderedDict)sha256)errorutilc                   @   s"   e Zd ZdZeedfddZdS )Webhooki,  Nc                 C   sJ   t | dr| d} t| ||| tj| td}tj	||pBtj
}|S )Ndecodeutf-8)object_pairs_hook)hasattrr   WebhookSignatureverify_headerjsonloadsr   stripeEventZconstruct_fromapi_key)payloadZ
sig_headersecret	tolerancer   dataevent r   O/var/www/html/python-backend/venv/lib/python3.9/site-packages/stripe/webhook.pyconstruct_event   s    

zWebhook.construct_event)__name__
__module____qualname__ZDEFAULT_TOLERANCEstaticmethodr   r   r   r   r   r      s   r   c                   @   s6   e Zd ZdZedd Zedd Zed	ddZdS )
r   Zv1c                 C   s$   t j|d| dtd}| S )Nr   )msg	digestmod)hmacnewencoder   	hexdigest)r   r   macr   r   r   _compute_signature    s    z#WebhookSignature._compute_signaturec                    sD   dd |  dD }tdd |D d } fdd|D }||fS )Nc                 S   s   g | ]}| d dqS )=   )split.0ir   r   r   
<listcomp>+       zBWebhookSignature._get_timestamp_and_signatures.<locals>.<listcomp>,c                 S   s    g | ]}|d  dkr|d qS )r   t   r   r)   r   r   r   r,   ,   r-   r   c                    s    g | ]}|d   kr|d qS )r   r0   r   r)   schemer   r   r,   -   r-   )r(   int)headerr2   Z
list_items	timestamp
signaturesr   r1   r   _get_timestamp_and_signatures)   s    z.WebhookSignature._get_timestamp_and_signaturesNc                    s   z|  || j\}}W n  ty6   td||Y n0 |sPtd| j ||d||f }| || t fdd|D std|||r|t | k rtd| ||dS )	Nz6Unable to extract timestamp and signatures from headerz+No signatures found with expected scheme %sz%d.%sc                 3   s   | ]}t  |V  qd S )N)r   Zsecure_compare)r*   sZexpected_sigr   r   	<genexpr>G   r-   z1WebhookSignature.verify_header.<locals>.<genexpr>z?No signatures found matching the expected signature for payloadz)Timestamp outside the tolerance zone (%d)T)r7   EXPECTED_SCHEME	Exceptionr   ZSignatureVerificationErrorr%   anytime)clsr   r4   r   r   r5   r6   Zsigned_payloadr   r9   r   r   0   sB    
zWebhookSignature.verify_header)N)	r   r   r   r;   r   r%   r7   classmethodr   r   r   r   r   r      s   

r   )r    r   r>   collectionsr   hashlibr   r   r   r   objectr   r   r   r   r   r   <module>   s   