
    +h^
                     x    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e
      Z G d de
      Zy)	    N)OrderedDict)sha256)errorutilc                   &    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                  j                  ||xs t        j                        }|S )Ndecodeutf-8)object_pairs_hook)hasattrr
   WebhookSignatureverify_headerjsonloadsr   stripeEventconstruct_fromapi_key)payload
sig_headersecret	tolerancer   dataevents          A/var/www/html/venv/lib/python3.12/site-packages/stripe/webhook.pyconstruct_eventzWebhook.construct_event   sd     7H%nnW-G&&w
FINzz'[A++D'2KV^^L    )__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_signatures)   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        j                  d| j                  z  ||      d||fz  }| j                  ||      t        fd|D              st        j                  d||      |r4|t        j                         |z
  k  rt        j                  d|z  ||      y# t        $ r t        j                  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>G   s     LA4&&|Q7Ls    #z?No signatures found matching the expected signature for payloadz)Timestamp outside the tolerance zone (%d)T)r>   EXPECTED_SCHEME	Exceptionr   SignatureVerificationErrorr/   anytime)	clsr   r8   r   r   r<   r=   signed_payloadrE   s	           @r   r   zWebhookSignature.verify_header0   s   		$'$E$E++%!Iz 22**+	  !Iw#77--nfELLL22	  TYY[9%<<22;iG  A  	22H 	s   C !C$rA   )	r   r    r!   rG   r#   r/   r>   classmethodr   r$   r   r   r   r      sA    O  % % % %r   r   )r*   r   rK   collectionsr   hashlibr   r   r   r   objectr   r   r$   r   r   <module>rR      s2       #   f $9v 9r   