
    <@g                         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	 d dlm
Z
 d dlmZ d dlmZ  G d d	e      Z G d
 de      Zy)    N)OrderedDict)sha256)Event)_util)SignatureVerificationError)_APIRequestorc                   &    e Zd ZdZeedfd       Zy)Webhooki,  Nc                 "   t        | d      r| j                  d      } t        j                  | |||       t	        j
                  | t              }t        j                  |t        j                  |xs t        j                        d      }|S )Ndecodeutf-8)object_pairs_hook)api_keyV1)values	requestorapi_mode)hasattrr   WebhookSignatureverify_headerjsonloadsr   r   _construct_fromr   _global_with_optionsstriper   )payload
sig_headersecret	tolerancer   dataevents          N/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/stripe/_webhook.pyconstruct_eventzWebhook.construct_event   sy     7H%nnW-G&&w
FINzz'[A%%#8816>> 
     )__name__
__module____qualname__DEFAULT_TOLERANCEstaticmethodr#    r$   r"   r
   r
      s    /@$ r$   r
   c                   B    e Zd ZdZed        Zed        Zedd       Zy)r   v1c                     t        j                  |j                  d      | j                  d      t              }|j	                         S )Nr   )msg	digestmod)hmacnewencoder   	hexdigest)r   r   macs      r"   _compute_signaturez#WebhookSignature._compute_signature*   s9    hhMM'"w'

 }}r$   c                 
   | j                  d      D cg c]  }|j                  dd       }}t        |D cg c]  }|d   dk(  s|d    c}d         }|D cg c]  }|d   |k(  s|d    }}||fS c c}w c c}w c c}w )N,=   r   t   )splitint)headerschemei
list_items	timestamp
signaturess         r"   _get_timestamp_and_signaturesz.WebhookSignature._get_timestamp_and_signatures3   s    /5||C/@A!aggc1oA
AzA!QqTS[1A!DE	$.Aq!A$&.adA
A*$$ BAAs   A6A;A;B )B Nc                 ~   	 | j                  || j                        \  }}|st        d| j                  z  ||      d||fz  }| j	                  ||      t        fd|D              st        d||      |r*|t        j                         |z
  k  rt        d|z  ||      y# t        $ r t        d||      w xY w)Nz6Unable to extract timestamp and signatures from headerz+No signatures found with expected scheme %sz%d.%sc              3   J   K   | ]  }t        j                  |        y wN)r   secure_compare).0sexpected_sigs     r"   	<genexpr>z1WebhookSignature.verify_header.<locals>.<genexpr>Q   s     MQ5''a8Ms    #z?No signatures found matching the expected signature for payloadz)Timestamp outside the tolerance zone (%d)T)rD   EXPECTED_SCHEME	Exceptionr   r5   anytime)	clsr   r>   r   r   rB   rC   signed_payloadrK   s	           @r"   r   zWebhookSignature.verify_header:   s    		$'$E$E++%!Iz ,**+	  !Iw#77--nfEM*MM,	  TYY[9%<<,;iG  A  	,H 	s   B% %B<rG   )	r%   r&   r'   rM   r)   r5   rD   classmethodr   r*   r$   r"   r   r   '   sA    O  % % % %r$   r   )r0   r   rP   collectionsr   hashlibr   r   stripe._eventr   r   stripe._errorr   stripe._api_requestorr   objectr
   r   r*   r$   r"   <module>rZ      s=       #     4 /f 09v 9r$   