o
    ØRWj’  ã                   @  s¸   d dl mZ d dlZd dlZ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mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddgZG dd„ deƒZG dd„ deƒZdS )é    )ÚannotationsN)Úcasté   )ÚHeadersLike)Úget_required_header)Úconstruct_type)ÚSyncAPIResourceÚAsyncAPIResource)ÚInvalidWebhookSignatureError)ÚUnwrapWebhookEventÚWebhooksÚAsyncWebhooksc                   @  ó.   e Zd Zddœddd„Zdddœddd„ZdS )r   N©ÚsecretÚpayloadústr | bytesÚheadersr   r   ú
str | NoneÚreturnr   c                C  s8   |du r| j j}| j|||d� ttttt |¡d�ƒS )úKValidates that the given payload was sent by OpenAI and parses the payload.N©r   r   r   ©Útype_Úvalue)Ú_clientÚwebhook_secretÚverify_signaturer   r   r   ÚjsonÚloads)Úselfr   r   r   © r!   úq/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/resources/webhooks/webhooks.pyÚunwrap   s   þþzWebhooks.unwrapé,  ©r   Ú	tolerancer&   ÚintÚNonec                  sn  |du r| j j}|du rtdƒ‚t|dƒ}t|dƒ}t|dƒ}zt|ƒ}W n ty1   tdƒd‚w tt ¡ ƒ}	|	| |krCtdƒd‚||	| krNtdƒd‚g }
| ¡ D ]}| d	¡re|
 	|d
d… ¡ qT|
 	|¡ qT| d¡rzt
 |dd… ¡}n| ¡ }t|tƒrˆ| d¡n|}|› d|› d|› �}t
 t || ¡ tj¡ ¡ ¡ ¡ ‰ t‡ fdd„|
D ƒƒsµtdƒd‚dS )á\  Validates whether or not the webhook payload was sent by OpenAI.

        Args:
            payload: The webhook payload
            headers: The webhook headers
            secret: The webhook secret (optional, will use client secret if not provided)
            tolerance: Maximum age of the webhook in seconds (default: 300 = 5 minutes)
        Nú�The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI(webhook_secret='123'), or passed to this functionúwebhook-signatureúwebhook-timestampú
webhook-idú Invalid webhook timestamp formatúWebhook timestamp is too oldúWebhook timestamp is too newúv1,r   Úwhsec_é   úutf-8Ú.c                 3  ó   � | ]	}t  ˆ |¡V  qd S ©N©ÚhmacÚcompare_digest©Ú.0Úsig©Úexpected_signaturer!   r"   Ú	<genexpr>p   ó   € z,Webhooks.verify_signature.<locals>.<genexpr>úAThe given webhook signature does not match the expected signature©r   r   Ú
ValueErrorr   r'   r
   ÚtimeÚsplitÚ
startswithÚappendÚbase64Ú	b64decodeÚencodeÚ
isinstanceÚbytesÚdecodeÚ	b64encoder9   ÚnewÚhashlibÚsha256ÚdigestÚany©r    r   r   r   r&   Úsignature_headerÚ	timestampÚ
webhook_idÚtimestamp_secondsÚnowÚ
signaturesÚpartÚdecoded_secretÚbodyÚsigned_payloadr!   r>   r"   r   ,   sR   ÿ



ÿ



ÿþÿþÿzWebhooks.verify_signature©r   r   r   r   r   r   r   r   ©
r   r   r   r   r   r   r&   r'   r   r(   ©Ú__name__Ú
__module__Ú__qualname__r#   r   r!   r!   r!   r"   r      s    ûúc                   @  r   )r   Nr   r   r   r   r   r   r   r   r   c                C  sP   |du r| j j}| j|||d� t|tƒr| d¡n|}ttttt	 
|¡d�ƒS )r   Nr   r4   r   )r   r   r   rL   rM   rN   r   r   r   r   r   )r    r   r   r   r^   r!   r!   r"   r#   w   s   þþzAsyncWebhooks.unwrapr$   r%   r&   r'   r(   c                  sn  |du r| j j}|du rtdƒd‚t|dƒ}t|dƒ}t|dƒ}zt|ƒ}W n ty2   tdƒd‚w tt ¡ ƒ}	|	| |krDtdƒd‚||	| krOtdƒd‚g }
| ¡ D ]}| d	¡rf|
 	|d
d… ¡ qU|
 	|¡ qU| d¡r{t
 |dd… ¡}n| ¡ }t|tƒr‰| d¡n|}|› d|› d|› �}t
 t || ¡ tj¡ ¡ ¡ ¡ ‰ t‡ fdd„|
D ƒƒsµtdƒ‚dS )r)   Nr*   r+   r,   r-   r.   r/   r0   r1   r   r2   r3   r4   r5   c                 3  r6   r7   r8   r;   r>   r!   r"   r@   Ñ   rA   z1AsyncWebhooks.verify_signature.<locals>.<genexpr>rB   rC   rU   r!   r>   r"   r   �   sN   ÿý



ÿ



ÿþÿzAsyncWebhooks.verify_signaturer`   ra   rb   r!   r!   r!   r"   r   v   s    ûú)Ú
__future__r   r9   r   rE   rI   rQ   Útypingr   Ú_typesr   Ú_utilsr   Ú_modelsr   Ú	_resourcer   r	   Ú_exceptionsr
   Ú#types.webhooks.unwrap_webhook_eventr   Ú__all__r   r   r!   r!   r!   r"   Ú<module>   s    `