o
    ›¨ÊhÝ   ã                   @   sœ   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
mZmZmZmZ dd	lmZmZ G d
d„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)Úparse_datetimeé   )ÚAnymailBaseWebhookViewé   )ÚAnymailConfigurationError)ÚAnymailInboundMessage)ÚinboundÚtrackingÚAnymailInboundEventÚAnymailTrackingEventÚ	EventTypeÚRejectReason)ÚgetfirstÚEmailAddressc                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚPostmarkBaseWebhookViewz%Base view class for Postmark webhooksÚPostmarkc                 C   s   t  |j d¡¡}|  |¡gS )Nzutf-8)ÚjsonÚloadsÚbodyÚdecodeÚesp_to_anymail_event)ÚselfÚrequestÚ	esp_event© r   úK/var/www/html/env/lib/python3.10/site-packages/anymail/webhooks/postmark.pyÚparse_events   s   z$PostmarkBaseWebhookView.parse_eventsc                 C   s   t ƒ ‚)N)ÚNotImplementedError)r   r   r   r   r   r      s   z,PostmarkBaseWebhookView.esp_to_anymail_eventN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úesp_namer   r   r   r   r   r   r      s
    r   c                   @   sL  e Zd ZdZeZejejej	ej
ejejdœZi dejejf“dejdf“dejejf“dejdf“dejdf“d	ejdf“d
ejdf“dejejf“dejdf“dejdf“dejejf“dejejf“dejdf“dejejf“dejejf“dejejf“dejdf“ejejfejdfejdfejejfejdfdœ¥Zdd„ ZdS )ÚPostmarkTrackingWebhookViewz>Handler for Postmark delivery and engagement tracking webhooks)ÚBounceÚClickÚDeliveryÚOpenÚSpamComplaintÚInboundÚ
HardBounceÚ	TransientNÚUnsubscribeÚ	SubscribeÚAutoResponderÚAddressChangeÚDnsErrorÚSpamNotificationÚOpenRelayTestÚUnknownÚ
SoftBounceÚVirusNotificationÚChallengeVerificationÚBadEmailAddressr(   ÚManuallyDeactivatedÚUnconfirmed)ÚBlockedÚSMTPApiErrorÚInboundErrorÚDMARCPolicyÚTemplateRenderingFailedc           
      C   sn  d }z|d }W n t y   d|v rtj}ntj}Y n	w | j |tj¡}|tjkr.tdƒ‚|tjtjfv rKz| j	|d  \}}W n	 t yJ   Y nw t
|ddgd ƒ}z	t
|g d¢ƒ}W n t yg   d }Y nw t|ƒ}zt|d ƒ}W n t y   d }Y nw z|d	 g}	W n t y’   g }	Y nw t| d
d ¡|||| dd ¡| dd ¡|||	|| dd ¡| dd ¡d�S )NÚ
RecordTypeÚFromFullz_You seem to have set Postmark's *inbound* webhook to Anymail's Postmark *tracking* webhook URL.ÚTypeÚEmailÚ	Recipient)ÚDeliveredAtÚ	BouncedAtÚ
ReceivedAtÚIDÚTagÚDescriptionÚ	MessageIDÚDetailsÚ	UserAgentÚOriginalLink)Údescriptionr   Úevent_idÚ
event_typeÚ
message_idÚmta_responseÚ	recipientÚreject_reasonÚtagsÚ	timestampÚ
user_agentÚ	click_url)ÚKeyErrorr   ÚINBOUNDÚUNKNOWNÚevent_record_typesÚgetr   ÚBOUNCEDÚ
COMPLAINEDÚevent_typesr   r   Ústrr   )
r   r   rT   Úesp_record_typerP   rS   ÚtimestrrV   rO   rU   r   r   r   r   B   sf   €û
ÿÿÿÿÿ




ôz0PostmarkTrackingWebhookView.esp_to_anymail_event)r   r   r    r!   r	   Úsignalr   r^   ÚCLICKEDÚ	DELIVEREDÚOPENEDr_   rZ   r\   r   ÚDEFERREDÚUNSUBSCRIBEDÚ
SUBSCRIBEDÚAUTORESPONDEDÚSPAMr[   ÚOTHERÚREJECTEDÚINVALIDÚBLOCKEDÚFAILEDÚINBOUND_FAILEDr`   r   r   r   r   r   r#      sh    ù
þ
ýü
û
ú
ù
ø	÷

ö
õôó
òñðï
î

ér#   c                   @   s(   e Zd ZdZeZdd„ Zedd„ ƒZdS )ÚPostmarkInboundWebhookViewz$Handler for Postmark inbound webhookc                    s´  |  dd¡dkrtd|d  ƒ‚dd„ |  dg ¡D ƒ}tjˆ  |  d¡¡d ‡ fd	d„|  d
g ¡D ƒ¡d ‡ fdd„|  dg ¡D ƒ¡|  dd¡dd„ |  dg ¡D ƒ|  dd¡|  dd¡|d�}d|v rmd|vrm|d |d< d|v r{d|vr{|d |d< t| dg ¡ƒdkrž|d  ¡ }| 	d¡s•| 	d¡rž|j
dd dd�|_|  dd ¡|_|  dd ¡|_|  dd ¡ ¡ d!k|_z	t|d" ƒ|_W n ttfyË   Y nw ttjd |  d#d ¡||d$�S )%Nr?   r)   zYYou seem to have set Postmark's *%s* webhook to Anymail's Postmark *inbound* webhook URL.c                 S   s@   g | ]}t j|d  |d d| dd¡pd| dd¡pdd�‘qS )ÚContentTypeÚContentTÚNameÚ NÚ	ContentID)Úcontent_typeÚcontentÚbase64ÚfilenameÚ
content_id)r   Úconstruct_attachmentr]   )Ú.0Ú
attachmentr   r   r   Ú
<listcomp>‰   s    úüÿzCPostmarkInboundWebhookView.esp_to_anymail_event.<locals>.<listcomp>ÚAttachmentsr@   z, c                    ó   g | ]}ˆ   |¡‘qS r   ©Ú_address)r   Úto©r   r   r   r�   •   ó    ÚToFullc                    rƒ   r   r„   )r   Úccr‡   r   r   r�   –   rˆ   ÚCcFullÚSubjectrw   c                 S   s   g | ]
}|d  |d f‘qS )rv   ÚValuer   )r   Úheaderr   r   r   r�   ™   s    ÚHeadersÚTextBodyÚHtmlBody)Ú
from_emailr†   rŠ   ÚsubjectÚheadersÚtextÚhtmlÚattachmentsÚDateÚReplyTozReply-TozReceived-SPFr   ÚpassÚneutralzenvelope-from)rŽ   ÚOriginalRecipientÚStrippedTextReplyzX-Spam-StatusÚNoÚyeszX-Spam-ScorerJ   )rP   rV   rO   r   Úmessage)r]   r   r   Ú	constructr…   ÚjoinÚlenÚget_allÚlowerÚ
startswithÚ	get_paramÚenvelope_senderÚenvelope_recipientÚstripped_textÚspam_detectedÚfloatÚ
spam_scoreÚ	TypeErrorÚ
ValueErrorr
   r   rZ   )r   r   r—   r    Úreceived_spfr   r‡   r   r   ƒ   sT   ÿÿ
ù



÷ÿ
ûz/PostmarkInboundWebhookView.esp_to_anymail_eventc                 C   s,   | du rdS t t|  dd¡|  dd¡d�ƒS )zOReturn an formatted email address from a Postmark inbound {From,To,Cc}Full dictNrw   rv   rB   )Údisplay_nameÚ	addr_spec)ra   r   r]   )Úfullr   r   r   r…   ½   s   

þz#PostmarkInboundWebhookView._addressN)	r   r   r    r!   r   rd   r   Ústaticmethodr…   r   r   r   r   rs   ~   s    :rs   )r   Údjango.utils.dateparser   Úbaser   Ú
exceptionsr   r   r   Úsignalsr	   r
   r   r   r   Úutilsr   r   r   r#   rs   r   r   r   r   Ú<module>   s     e